Commit 47267ca3 authored by shohboz's avatar shohboz

[UPD] MUS-136 Feature, forget password updated and success and some changes

parent a7cfcb82
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
<entry key="app/src/main/res/layout/item_pin.xml" value="0.23497267759562843" /> <entry key="app/src/main/res/layout/item_pin.xml" value="0.23497267759562843" />
<entry key="app/src/main/res/layout/layout_ask_create_task.xml" value="0.22643442622950818" /> <entry key="app/src/main/res/layout/layout_ask_create_task.xml" value="0.22643442622950818" />
<entry key="app/src/main/res/layout/layout_exit.xml" value="0.25625" /> <entry key="app/src/main/res/layout/layout_exit.xml" value="0.25625" />
<entry key="app/src/main/res/layout/layout_sender.xml" value="0.25625" />
<entry key="app/src/main/res/layout/motion_layout.xml" value="0.266796875" /> <entry key="app/src/main/res/layout/motion_layout.xml" value="0.266796875" />
<entry key="app/src/main/res/menu/bottom_nav_menu.xml" value="0.3416666666666667" /> <entry key="app/src/main/res/menu/bottom_nav_menu.xml" value="0.3416666666666667" />
<entry key="app/src/main/res/xml/layout_description.xml" value="0.25625" /> <entry key="app/src/main/res/xml/layout_description.xml" value="0.25625" />
......
...@@ -4,11 +4,10 @@ import android.os.Bundle ...@@ -4,11 +4,10 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import uz.ssd.mobiuz.databinding.ActivityAuthBinding import uz.ssd.mobiuz.databinding.ActivityAuthBinding
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.Utils import uz.ssd.mobiuz.utils.Utils
@AndroidEntryPoint @AndroidEntryPoint
......
...@@ -7,7 +7,7 @@ import androidx.appcompat.app.AppCompatActivity ...@@ -7,7 +7,7 @@ import androidx.appcompat.app.AppCompatActivity
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import uz.ssd.mobiuz.databinding.ActivityLanguageBinding import uz.ssd.mobiuz.databinding.ActivityLanguageBinding
import uz.ssd.mobiuz.model.SharedPref import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
......
package uz.ssd.mobiuz package uz.ssd.mobiuz
import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContentProviderCompat.requireContext
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.navigation.NavController import androidx.navigation.NavController
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import uz.ssd.mobiuz.databinding.ActivityMainBinding import uz.ssd.mobiuz.databinding.ActivityMainBinding
import uz.ssd.mobiuz.model.SharedPref import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.ui.auth.FullScreenDialog import uz.ssd.mobiuz.ui.global.FullScreenDialog
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.extensions.customLog import uz.ssd.mobiuz.utils.extensions.customLog
import uz.ssd.mobiuz.utils.extensions.setupWithNavController import uz.ssd.mobiuz.utils.extensions.setupWithNavController
import javax.inject.Inject import javax.inject.Inject
...@@ -43,7 +45,15 @@ class MainActivity : AppCompatActivity() { ...@@ -43,7 +45,15 @@ class MainActivity : AppCompatActivity() {
val arg = it.getStringExtra(CONSTANTS.FIRST) ?: "" val arg = it.getStringExtra(CONSTANTS.FIRST) ?: ""
if (arg.isEmpty()) { if (arg.isEmpty()) {
val dialog = FullScreenDialog() val dialog = FullScreenDialog()
dialog.setOnPinDoneListener { } dialog.setOnPinDoneListener {
pref.setUserToken("")
pref.isRegistered = false
pref.pin_code = ""
val intent = Intent(this, AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
finish()
}
dialog.show(supportFragmentManager, "tag") dialog.show(supportFragmentManager, "tag")
} }
} }
......
...@@ -8,7 +8,7 @@ import dagger.hilt.android.AndroidEntryPoint ...@@ -8,7 +8,7 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import uz.ssd.mobiuz.databinding.ActivitySplashBinding import uz.ssd.mobiuz.databinding.ActivitySplashBinding
import uz.ssd.mobiuz.model.SharedPref import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
...@@ -37,7 +37,7 @@ class SplashActivity : AppCompatActivity() { ...@@ -37,7 +37,7 @@ class SplashActivity : AppCompatActivity() {
} }
pref.pin_code.isEmpty() -> { pref.pin_code.isEmpty() -> {
startActivity(Intent(this@SplashActivity, AuthActivity::class.java).putExtra(CONSTANTS.TYPE_AUTH,CONSTANTS.PIN_CODE)) startActivity(Intent(this@SplashActivity, AuthActivity::class.java).putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.PIN_CODE))
} }
else -> { else -> {
......
package uz.ssd.mobiuz.di package uz.ssd.mobiuz.di
import android.content.Context import android.content.Context
import android.os.Build
import com.readystatesoftware.chuck.ChuckInterceptor import com.readystatesoftware.chuck.ChuckInterceptor
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
...@@ -14,12 +13,10 @@ import okhttp3.logging.HttpLoggingInterceptor ...@@ -14,12 +13,10 @@ import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
import uz.ssd.mobiuz.BuildConfig
import uz.ssd.mobiuz.model.SharedPref import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.network.api.ApiService import uz.ssd.mobiuz.network.api.ApiService
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.Utils import uz.ssd.mobiuz.utils.Utils
import java.util.*
import javax.inject.Singleton import javax.inject.Singleton
@Module @Module
......
...@@ -30,4 +30,19 @@ interface ApiService { ...@@ -30,4 +30,19 @@ interface ApiService {
@POST("main/index") @POST("main/index")
suspend fun mainIndex(): ResponseObject<Customer> suspend fun mainIndex(): ResponseObject<Customer>
@POST("customer/forget-password")
suspend fun forgetPassword(
@Body req: UserAuth
): ResponseList<Any>
@POST("customer/check-reset-code")
suspend fun checkResetCode(
@Body req: UserAuth
): ResponseList<Any>
@POST("customer/reset-password")
suspend fun resetPassword(
@Body req: UserAuth
): ResponseObject<GenerateToken>
} }
\ No newline at end of file
package uz.ssd.mobiuz.network.model package uz.ssd.mobiuz.network.model
data class Customer( data class Customer(
var customer: CustomerData var customer: CustomerData?
) )
data class CustomerData( data class CustomerData(
var info: CustomerInfo, var info: CustomerInfo?,
var name: String var name: String
) )
data class CustomerInfo( data class CustomerInfo(
var balance: CustomerInfoBalance, var balance: CustomerInfoBalance?,
var counters: CustomerInfoCounters var counters: CustomerInfoCounters?
) )
data class CustomerInfoBalance( data class CustomerInfoBalance(
...@@ -20,13 +20,13 @@ data class CustomerInfoBalance( ...@@ -20,13 +20,13 @@ data class CustomerInfoBalance(
) )
data class CustomerInfoCounters( data class CustomerInfoCounters(
var BYTE: CodeValueUnit, var BYTE: CodeValueUnit?,
var ITEM: CodeValueUnit, var ITEM: CodeValueUnit?,
var SECOND: CodeValueUnit var SECOND: CodeValueUnit?
) )
data class CodeValueUnit( data class CodeValueUnit(
var code: String, var code: String?,
var value: Int, var value: Int?,
var unit: String, var unit: String?,
) )
\ No newline at end of file
...@@ -7,6 +7,7 @@ import uz.ssd.mobiuz.model.UserAuth ...@@ -7,6 +7,7 @@ import uz.ssd.mobiuz.model.UserAuth
import uz.ssd.mobiuz.network.api.ApiService import uz.ssd.mobiuz.network.api.ApiService
import uz.ssd.mobiuz.network.model.Action import uz.ssd.mobiuz.network.model.Action
import uz.ssd.mobiuz.network.model.Customer import uz.ssd.mobiuz.network.model.Customer
import uz.ssd.mobiuz.network.model.GenerateToken
import uz.ssd.mobiuz.network.model.UiStateObject import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.utils.extensions.userMessage import uz.ssd.mobiuz.utils.extensions.userMessage
import javax.inject.Inject import javax.inject.Inject
...@@ -30,7 +31,6 @@ class AuthRepository @Inject constructor( ...@@ -30,7 +31,6 @@ class AuthRepository @Inject constructor(
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
} catch (e: Exception) { } catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context)) UiStateObject.ERROR(e.userMessage(context))
} }
...@@ -108,4 +108,59 @@ class AuthRepository @Inject constructor( ...@@ -108,4 +108,59 @@ class AuthRepository @Inject constructor(
} }
} }
suspend fun checkResetCode(data: UserAuth): UiStateObject<String> {
return try {
val res = apiService.checkResetCode(data)
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
}
res.errors.isNotEmpty() -> {
UiStateObject.ERRORS(res.errors)
}
else -> UiStateObject.ERROR(res.message)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
}
}
suspend fun resetPassword(data: UserAuth): UiStateObject<String> {
return try {
val res = apiService.resetPassword(data)
when {
res.status -> {
pref.setUserToken(res.data?.token)
UiStateObject.SUCCESS(res.message)
}
res.errors.isNotEmpty() -> {
UiStateObject.ERRORS(res.errors)
}
else -> UiStateObject.ERROR(res.message)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
}
}
suspend fun forgetPassword(data: UserAuth): UiStateObject<String> {
return try {
val res = apiService.forgetPassword(data)
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
}
res.errors.isNotEmpty() -> {
UiStateObject.ERRORS(res.errors)
}
else -> UiStateObject.ERROR(res.message)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
}
}
} }
\ No newline at end of file
...@@ -52,4 +52,31 @@ class AuthViewModel @Inject constructor( ...@@ -52,4 +52,31 @@ class AuthViewModel @Inject constructor(
_loginUiState.value = repository.loginUser(data) _loginUiState.value = repository.loginUser(data)
_loginUiState.value = UiStateObject.EMPTY _loginUiState.value = UiStateObject.EMPTY
} }
private val _forgetPasswordUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val forgetPasswordUiState: StateFlow<UiStateObject<String>> = _forgetPasswordUiState
fun forgetPassword(data: UserAuth) = viewModelScope.launch {
_forgetPasswordUiState.value = UiStateObject.LOADING
_forgetPasswordUiState.value = repository.forgetPassword(data)
_forgetPasswordUiState.value = UiStateObject.EMPTY
}
private val _checkResetCodeUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val checkResetCodeUiState: StateFlow<UiStateObject<String>> = _checkResetCodeUiState
fun checkResetCode(data: UserAuth) = viewModelScope.launch {
_checkResetCodeUiState.value = UiStateObject.LOADING
_checkResetCodeUiState.value = repository.checkResetCode(data)
_checkResetCodeUiState.value = UiStateObject.EMPTY
}
private val _resetPasswordUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val resetPasswordUiState: StateFlow<UiStateObject<String>> = _resetPasswordUiState
fun resetPassword(data: UserAuth) = viewModelScope.launch {
_resetPasswordUiState.value = UiStateObject.LOADING
_resetPasswordUiState.value = repository.resetPassword(data)
_resetPasswordUiState.value = UiStateObject.EMPTY
}
} }
\ No newline at end of file
package uz.ssd.mobiuz.ui.auth
import android.app.AlertDialog
import android.content.Context
import android.view.LayoutInflater
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentPinDialogBinding
import uz.ssd.mobiuz.model.PinData
import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.utils.extensions.SingleBlock
class PinDialogFragment(context: Context) : AlertDialog(context,R.style.FullScreenDialog) {
lateinit var pref: SharedPref
private var _bn: FragmentPinDialogBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
private var listener: SingleBlock<Unit>? = null
init {
_bn = FragmentPinDialogBinding.inflate(LayoutInflater.from(context))
pref = SharedPref(context)
setView(bn.root)
setCancelable(false)
setUpUI()
}
fun setUpUI() {
bn.apply {
loadData()
rvPin.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
rvPin.adapter = pinAdapter
txtNotPin.isVisible = false
pinAdapter.setOnDoneListener {
if (pref.pin_code == it) {
listener?.invoke(Unit)
txtNotPin.isVisible = false
dismiss()
} else {
cardPin.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake))
txtNotPin.isVisible = true
}
}
for (i in 0 until btnViewGroup.childCount) {
btnViewGroup.getChildAt(i).setOnClickListener {
if (it.id == R.id.btn_remove) {
pinAdapter.removeItem()
txtNotPin.isVisible = false
} else {
val text = it as TextView
pinAdapter.addItem(text.text.toString().toInt())
}
}
}
}
}
fun setOnPinDoneListener(block: SingleBlock<Unit>) {
listener = block
}
private fun loadData() {
data.clear()
for (i in 0..3) {
data.add(PinData(-1))
}
pinAdapter.submitList(data)
}
}
\ No newline at end of file
package uz.ssd.mobiuz.ui.auth package uz.ssd.mobiuz.ui.auth.biometric
import android.Manifest import android.Manifest
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.app.ActivityCompat
import androidx.core.app.ActivityCompat.requestPermissions import androidx.core.app.ActivityCompat.requestPermissions
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import uz.ssd.mobiuz.BuildConfig import uz.ssd.mobiuz.BuildConfig
import uz.ssd.mobiuz.MainActivity import uz.ssd.mobiuz.MainActivity
import uz.ssd.mobiuz.R import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentBiometricBinding import uz.ssd.mobiuz.databinding.FragmentBiometricBinding
import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.ui.base.BaseFragment import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.utils.ButtonClick import uz.ssd.mobiuz.ui.global.ButtonClick
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint @AndroidEntryPoint
class BiometricFragment : BaseFragment(R.layout.fragment_biometric) { class BiometricFragment : BaseFragment(R.layout.fragment_biometric) {
...@@ -86,7 +77,7 @@ class BiometricFragment : BaseFragment(R.layout.fragment_biometric) { ...@@ -86,7 +77,7 @@ class BiometricFragment : BaseFragment(R.layout.fragment_biometric) {
private fun navigate() { private fun navigate() {
val intent = Intent(requireContext(), MainActivity::class.java) val intent = Intent(requireContext(), MainActivity::class.java)
intent.putExtra(CONSTANTS.FIRST,CONSTANTS.FIRST) intent.putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent) startActivity(intent)
requireActivity().finish() requireActivity().finish()
......
package uz.ssd.mobiuz.ui.auth package uz.ssd.mobiuz.ui.auth.check
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
...@@ -15,13 +15,14 @@ import uz.ssd.mobiuz.R ...@@ -15,13 +15,14 @@ import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentCheckPhoneBinding import uz.ssd.mobiuz.databinding.FragmentCheckPhoneBinding
import uz.ssd.mobiuz.model.UserAuth import uz.ssd.mobiuz.model.UserAuth
import uz.ssd.mobiuz.network.model.UiStateObject import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.ui.auth.AuthViewModel
import uz.ssd.mobiuz.ui.base.BaseFragment import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.ui.global.TextWatcherWrapper import uz.ssd.mobiuz.ui.global.TextWatcherWrapper
import uz.ssd.mobiuz.utils.ButtonClick import uz.ssd.mobiuz.ui.global.ButtonClick
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.Utils import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.customLog import uz.ssd.mobiuz.utils.extensions.customLog
import uz.ssd.mobiuz.utils.extensions.showMessage import uz.ssd.mobiuz.utils.extensions.showCustomDialog
@AndroidEntryPoint @AndroidEntryPoint
class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) { class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
...@@ -89,7 +90,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) { ...@@ -89,7 +90,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
bn.helperPhone.isVisible = false bn.helperPhone.isVisible = false
showProgressDialog(false) showProgressDialog(false)
showMessage(it.message) showCustomDialog(it.message,false){}
} }
is UiStateObject.ERRORS -> { is UiStateObject.ERRORS -> {
......
package uz.ssd.mobiuz.ui.auth package uz.ssd.mobiuz.ui.auth.login
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
...@@ -14,12 +14,13 @@ import uz.ssd.mobiuz.R ...@@ -14,12 +14,13 @@ import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentLoginBinding import uz.ssd.mobiuz.databinding.FragmentLoginBinding
import uz.ssd.mobiuz.model.UserAuth import uz.ssd.mobiuz.model.UserAuth
import uz.ssd.mobiuz.network.model.UiStateObject import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.ui.auth.AuthViewModel
import uz.ssd.mobiuz.ui.base.BaseFragment import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.ui.global.TextWatcherWrapper import uz.ssd.mobiuz.ui.global.TextWatcherWrapper
import uz.ssd.mobiuz.utils.ButtonClick import uz.ssd.mobiuz.ui.global.ButtonClick
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.Utils import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showMessage import uz.ssd.mobiuz.utils.extensions.showCustomDialog
@AndroidEntryPoint @AndroidEntryPoint
class LoginFragment : BaseFragment(R.layout.fragment_login) { class LoginFragment : BaseFragment(R.layout.fragment_login) {
...@@ -52,7 +53,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -52,7 +53,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
txtForgetPassword.setOnClickListener(object : ButtonClick() { txtForgetPassword.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
navController.navigate(R.id.forgetVerificationFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions()) viewModel.forgetPassword(UserAuth(phone.replace(" ", "").replace("+", "")))
} }
}) })
...@@ -104,7 +105,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -104,7 +105,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
} }
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
showProgressDialog(false) showProgressDialog(false)
showMessage(it.message) showCustomDialog(it.message,false){}
bn.helperPassword.isVisible = false bn.helperPassword.isVisible = false
bn.helperPhone.isVisible = false bn.helperPhone.isVisible = false
} }
...@@ -135,6 +136,33 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -135,6 +136,33 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
} }
} }
} }
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.forgetPasswordUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(R.id.verificationFragment,
bundleOf(
CONSTANTS.PHONE to phone,
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_FORGET
),
Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showCustomDialog(it.message,false){}
}
is UiStateObject.ERRORS -> {
showProgressDialog(false)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
} }
override fun onDestroy() { override fun onDestroy() {
......
package uz.ssd.mobiuz.ui.auth package uz.ssd.mobiuz.ui.auth.pin
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
...@@ -7,7 +7,6 @@ import android.view.animation.AnimationUtils ...@@ -7,7 +7,6 @@ import android.view.animation.AnimationUtils
import android.widget.TextView import android.widget.TextView
import androidx.core.hardware.fingerprint.FingerprintManagerCompat import androidx.core.hardware.fingerprint.FingerprintManagerCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
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
...@@ -20,7 +19,7 @@ import uz.ssd.mobiuz.databinding.FragmentPinBinding ...@@ -20,7 +19,7 @@ import uz.ssd.mobiuz.databinding.FragmentPinBinding
import uz.ssd.mobiuz.model.PinData import uz.ssd.mobiuz.model.PinData
import uz.ssd.mobiuz.model.SharedPref import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.ui.base.BaseFragment import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.Utils import uz.ssd.mobiuz.utils.Utils
import javax.inject.Inject import javax.inject.Inject
...@@ -36,8 +35,6 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) { ...@@ -36,8 +35,6 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
private val data = ArrayList<PinData>() private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter() private val pinAdapter = PinAdapter()
private val viewModel: AuthViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
arguments?.let { arguments?.let {
...@@ -65,7 +62,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) { ...@@ -65,7 +62,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
txtNotPin.isVisible = false txtNotPin.isVisible = false
pinAdapter.setOnDoneListener { pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
delay(500) delay(200)
if (pinCode == it) { if (pinCode == it) {
pref.pin_code = pinCode pref.pin_code = pinCode
txtNotPin.isVisible = false txtNotPin.isVisible = false
...@@ -104,7 +101,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) { ...@@ -104,7 +101,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
if (isEnabled) { if (isEnabled) {
navController.navigate(R.id.biometricFragment, null, Utils.navOptions()) navController.navigate(R.id.biometricFragment, null, Utils.navOptions())
} else { } else {
startActivity(Intent(requireContext(), MainActivity::class.java).putExtra(CONSTANTS.FIRST,CONSTANTS.FIRST)) startActivity(Intent(requireContext(), MainActivity::class.java).putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST))
requireActivity().finish() requireActivity().finish()
} }
} }
......
package uz.ssd.mobiuz.ui.auth package uz.ssd.mobiuz.ui.auth.register
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
...@@ -14,12 +14,13 @@ import uz.ssd.mobiuz.R ...@@ -14,12 +14,13 @@ import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentRegisterBinding import uz.ssd.mobiuz.databinding.FragmentRegisterBinding
import uz.ssd.mobiuz.model.UserAuth import uz.ssd.mobiuz.model.UserAuth
import uz.ssd.mobiuz.network.model.UiStateObject import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.ui.auth.AuthViewModel
import uz.ssd.mobiuz.ui.base.BaseFragment import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.ui.global.ButtonClick
import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.ui.global.TextWatcherWrapper import uz.ssd.mobiuz.ui.global.TextWatcherWrapper
import uz.ssd.mobiuz.utils.ButtonClick
import uz.ssd.mobiuz.utils.CONSTANTS
import uz.ssd.mobiuz.utils.Utils import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showMessage import uz.ssd.mobiuz.utils.extensions.showCustomDialog
@AndroidEntryPoint @AndroidEntryPoint
class RegisterFragment : BaseFragment(R.layout.fragment_register) { class RegisterFragment : BaseFragment(R.layout.fragment_register) {
...@@ -30,11 +31,15 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) { ...@@ -30,11 +31,15 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
private val viewModel: AuthViewModel by viewModels() private val viewModel: AuthViewModel by viewModels()
private var phone = "" private var phone = ""
private var type = ""
private var code = ""
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
arguments?.let { arguments?.let {
phone = it.getString(CONSTANTS.PHONE) ?: "" phone = it.getString(CONSTANTS.PHONE) ?: ""
type = it.getString(CONSTANTS.TYPE_VERIFICATION) ?: ""
code = it.getString(CONSTANTS.PIN_CODE) ?: ""
} }
} }
...@@ -52,7 +57,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) { ...@@ -52,7 +57,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
super.onTextChanged(s, start, before, count) super.onTextChanged(s, start, before, count)
txtCheckPassword.isVisible = (s.toString().length < 5) txtCheckPassword.isVisible = (s.toString().length < 5)
val confirmText = inputConfirm.text.toString().trim() val confirmText = inputConfirm.text.toString().trim()
if(confirmText.isNotEmpty()){ if (confirmText.isNotEmpty()) {
if (s.toString() == confirmText) { if (s.toString() == confirmText) {
imageCheck.setImageResource(R.drawable.ic_baseline_check_circle) imageCheck.setImageResource(R.drawable.ic_baseline_check_circle)
txtCheckConfirm.text = getString(R.string.password_same) txtCheckConfirm.text = getString(R.string.password_same)
...@@ -66,7 +71,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) { ...@@ -66,7 +71,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
} }
imageCheck.isVisible = true imageCheck.isVisible = true
txtCheckConfirm.isVisible = true txtCheckConfirm.isVisible = true
}else{ } else {
imageCheck.isVisible = false imageCheck.isVisible = false
txtCheckConfirm.isVisible = false txtCheckConfirm.isVisible = false
} }
...@@ -101,11 +106,15 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) { ...@@ -101,11 +106,15 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
when { when {
password.length < 5 || password != confirm -> { password.length < 5 || password != confirm -> {
// 0700224 50 gaz
} }
else -> { else -> {
if (type == CONSTANTS.TYPE_FORGET) {
viewModel.resetPassword(UserAuth(phone.replace(" ", "").replace("+", ""), password,code))
} else {
viewModel.register(UserAuth(phone.replace(" ", "").replace("+", ""), password)) viewModel.register(UserAuth(phone.replace(" ", "").replace("+", ""), password))
} }
}
} }
} }
...@@ -127,7 +136,39 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) { ...@@ -127,7 +136,39 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
} }
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
showProgressDialog(false) showProgressDialog(false)
showMessage(it.message) showCustomDialog(it.message, false) {}
}
is UiStateObject.ERRORS -> {
showProgressDialog(false)
var message = ""
it.errors.forEach {
message += it.message
}
// 97 756 5078
showCustomDialog(message, false) {}
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.resetPasswordUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
showCustomDialog("Password successfully updated", true) {
navController.popBackStack()
navController.navigate(R.id.pinFragment,null,Utils.navOptions())
}
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showCustomDialog(it.message, false) {}
} }
is UiStateObject.ERRORS -> { is UiStateObject.ERRORS -> {
...@@ -137,7 +178,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) { ...@@ -137,7 +178,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
message += it.message message += it.message
} }
// 97 756 5078 // 97 756 5078
showMessage(message) showCustomDialog(message, false) {}
} }
is UiStateObject.LOADING -> { is UiStateObject.LOADING -> {
showProgressDialog(true) showProgressDialog(true)
......
package uz.ssd.mobiuz.ui.auth package uz.ssd.mobiuz.ui.auth.verification
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.animation.AnimationUtils import android.view.animation.AnimationUtils
import androidx.core.os.bundleOf
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
...@@ -15,13 +16,14 @@ import uz.ssd.mobiuz.databinding.FragmentVerificationBinding ...@@ -15,13 +16,14 @@ import uz.ssd.mobiuz.databinding.FragmentVerificationBinding
import uz.ssd.mobiuz.model.SharedPref import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.model.UserAuth import uz.ssd.mobiuz.model.UserAuth
import uz.ssd.mobiuz.network.model.UiStateObject import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.ui.auth.AuthViewModel
import uz.ssd.mobiuz.ui.base.BaseFragment import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.ui.global.TextWatcherWrapper import uz.ssd.mobiuz.ui.global.TextWatcherWrapper
import uz.ssd.mobiuz.utils.ButtonClick import uz.ssd.mobiuz.ui.global.ButtonClick
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.Utils import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.hideKeyboard import uz.ssd.mobiuz.utils.hideKeyboard
import uz.ssd.mobiuz.utils.extensions.showMessage import uz.ssd.mobiuz.utils.extensions.showCustomDialog
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
...@@ -38,11 +40,13 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -38,11 +40,13 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
private var phone = "" private var phone = ""
private var type = ""
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
arguments?.let { arguments?.let {
phone = it.getString(CONSTANTS.PHONE) ?: "" phone = it.getString(CONSTANTS.PHONE) ?: ""
type = it.getString(CONSTANTS.TYPE_VERIFICATION) ?: ""
} }
} }
...@@ -77,9 +81,13 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -77,9 +81,13 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
btnLogin.setOnClickListener(object : ButtonClick() { btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
getLinePinCodes() getLinePinCodes()
if (code.length == 6) { val auth = UserAuth(phone.replace("+", "").replace(" ", ""), null, code)
viewModel.verification(UserAuth(phone.replace("+", "").replace(" ", ""), null, code)) if(type == CONSTANTS.TYPE_FORGET){
viewModel.checkResetCode(auth)
}else{
viewModel.verification(auth)
} }
} }
}) })
...@@ -110,7 +118,46 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -110,7 +118,46 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
showProgressDialog(false) showProgressDialog(false)
bn.lineField.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake)) bn.lineField.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
bn.helperLineField.isVisible = false bn.helperLineField.isVisible = false
showMessage(it.message) showCustomDialog(it.message,false){}
}
is UiStateObject.ERRORS -> {
showProgressDialog(false)
it.errors.forEach {
if (it.key == "code") {
bn.helperLineField.isVisible = true
bn.helperLineField.text = it.message
} else bn.helperLineField.isVisible = false
}
bn.lineField.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
}
is UiStateObject.LOADING -> {
bn.helperLineField.isVisible = false
showProgressDialog(true)
}
else -> Unit
}
}
}
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.checkResetCodeUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
bn.helperLineField.isVisible = false
pref.userPhone = phone
navController.navigate(R.id.registerFragment,
bundleOf(
CONSTANTS.PHONE to phone,
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_FORGET,
CONSTANTS.PIN_CODE to code,
),
Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
bn.lineField.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
bn.helperLineField.isVisible = false
showCustomDialog(it.message,false){}
} }
is UiStateObject.ERRORS -> { is UiStateObject.ERRORS -> {
showProgressDialog(false) showProgressDialog(false)
...@@ -121,7 +168,6 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -121,7 +168,6 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
} else bn.helperLineField.isVisible = false } else bn.helperLineField.isVisible = false
} }
bn.lineField.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake)) bn.lineField.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
// showMessage(it.message)
} }
is UiStateObject.LOADING -> { is UiStateObject.LOADING -> {
bn.helperLineField.isVisible = false bn.helperLineField.isVisible = false
......
package uz.ssd.mobiuz.ui.forget
import android.os.Bundle
import android.view.View
import androidx.core.view.isVisible
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentRegisterBinding
import uz.ssd.mobiuz.model.UserAuth
import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.ui.auth.AuthViewModel
import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.ui.global.TextWatcherWrapper
import uz.ssd.mobiuz.utils.ButtonClick
import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint
class ForgetPasswordFragment : BaseFragment(R.layout.fragment_register) {
private var _bn: FragmentRegisterBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val viewModel: AuthViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentRegisterBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
inputPassword.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
txtCheckPassword.isVisible = (s.toString().length < 6)
}
})
inputConfirm.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if (s.toString().length > 5 && s.toString() == inputPassword.text.toString().trim()) {
imageCheck.setImageResource(R.drawable.ic_baseline_check_circle)
txtCheckConfirm.text = getString(R.string.password_same)
txtCheckConfirm.setTextColor(requireActivity().resources.getColor(R.color.green))
btnLogin.isEnabled = true
} else {
imageCheck.setImageResource(R.drawable.ic_vector_error)
txtCheckConfirm.text = getString(R.string.password_not_same)
btnLogin.isEnabled = true
txtCheckConfirm.setTextColor(requireActivity().resources.getColor(R.color.red))
}
imageCheck.isVisible = true
txtCheckConfirm.isVisible = true
}
})
btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
val phone = inputPassword.text.toString().trim()
viewModel.login(UserAuth("phone", phone))
}
})
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
}
}
override fun collects() {
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.loginUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(R.id.pinFragment, null, Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
package uz.ssd.mobiuz.ui.forget
import android.graphics.Color
import android.os.Bundle
import android.view.View
import androidx.core.view.isVisible
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentVerificationBinding
import uz.ssd.mobiuz.model.UserAuth
import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.ui.auth.AuthViewModel
import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.utils.ButtonClick
import uz.ssd.mobiuz.utils.CONSTANTS
import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.hideKeyboard
import uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint
class ForgetVerificationFragment : BaseFragment(R.layout.fragment_verification) {
private var _bn: FragmentVerificationBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val viewModel: AuthViewModel by viewModels()
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
var code = ""
private var phone = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
phone = it.getString(CONSTANTS.PHONE) ?: ""
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentVerificationBinding.bind(view)
setUpUI()
count(true)
collects()
}
override fun setUpUI() {
bn.apply {
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
viewGroup.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
v?.hideKeyboard()
}
})
loadEdited()
btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
getLinePinCodes()
if(code.length == 6){
viewModel.login(UserAuth("phone", "password"))
}else{
clearPins()
}
}
})
countWaitText.setTextColor(Color.parseColor("#97ADB6"))
sentCodeAgain.setTextColor(Color.parseColor("#FF9500"))
sentCodeAgain.setOnClickListener {
count(true)
}
coutdownView.setOnCountdownEndListener {
count(false)
}
}
}
private fun loadEdited() {
}
private fun getLinePinCodes() {
}
private fun clearPins() {
}
override fun collects() {
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.loginUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(R.id.forgetPasswordFragment, null, Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
}
private fun count(status: Boolean) {
bn.apply {
sentCodeAgain.isVisible = !status
countWaitText.isVisible = status
coutdownView.isVisible = status
if (status) coutdownView.start(60000)
}
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
package uz.ssd.mobiuz.utils package uz.ssd.mobiuz.ui.global
import android.os.SystemClock import android.os.SystemClock
import android.view.View import android.view.View
......
package uz.ssd.mobiuz.utils package uz.ssd.mobiuz.ui.global
object CONSTANTS { object CONSTANTS {
const val BASE_URL = "http://10.160.45.60/api/v1/" const val BASE_URL = "http://10.160.45.60/api/v1/"
...@@ -9,6 +9,8 @@ object CONSTANTS { ...@@ -9,6 +9,8 @@ object CONSTANTS {
const val PHONE = "phone" const val PHONE = "phone"
const val PIN_CODE = "pin_code" const val PIN_CODE = "pin_code"
const val TYPE_AUTH = "type_auth" const val TYPE_AUTH = "type_auth"
const val TYPE_VERIFICATION = "type_verification"
const val TYPE_FORGET = "type_forget"
const val FIRST = "first" const val FIRST = "first"
const val LONGITUDE = 69.2602108116081 const val LONGITUDE = 69.2602108116081
......
package uz.ssd.mobiuz.ui.base package uz.ssd.mobiuz.ui.global
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
......
package uz.ssd.mobiuz.ui.auth package uz.ssd.mobiuz.ui.global
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
...@@ -14,6 +14,7 @@ import uz.ssd.mobiuz.R ...@@ -14,6 +14,7 @@ import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentPinDialogBinding import uz.ssd.mobiuz.databinding.FragmentPinDialogBinding
import uz.ssd.mobiuz.model.PinData import uz.ssd.mobiuz.model.PinData
import uz.ssd.mobiuz.model.SharedPref import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.ui.auth.pin.PinAdapter
import uz.ssd.mobiuz.utils.extensions.SingleBlock import uz.ssd.mobiuz.utils.extensions.SingleBlock
import javax.inject.Inject import javax.inject.Inject
...@@ -37,6 +38,7 @@ class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) { ...@@ -37,6 +38,7 @@ class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentPinDialogBinding.bind(view) _bn = FragmentPinDialogBinding.bind(view)
isCancelable = false
setUpUI() setUpUI()
} }
...@@ -46,13 +48,17 @@ class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) { ...@@ -46,13 +48,17 @@ class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) {
loadData() loadData()
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
withPassword.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
listener?.invoke(Unit)
}
})
rvPin.adapter = pinAdapter rvPin.adapter = pinAdapter
txtNotPin.isVisible = false txtNotPin.isVisible = false
pinAdapter.setOnDoneListener { pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
delay(200) delay(200)
if (pref.pin_code == it) { if (pref.pin_code == it) {
listener?.invoke(Unit)
txtNotPin.isVisible = false txtNotPin.isVisible = false
dismiss() dismiss()
} else { } else {
......
package uz.ssd.mobiuz.ui.global
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.LayoutSenderBinding
import uz.ssd.mobiuz.utils.extensions.SingleBlock
class SenderDialog(
private val txtDescription: String,
private val status: Boolean
) : DialogFragment() {
private var listener: SingleBlock<Unit>? = null
private var _bn: LayoutSenderBinding? = null
private val bn get() = _bn!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.CustomDialog)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_bn = LayoutSenderBinding.inflate(inflater, container, false)
return bn.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
isCancelable = false
bn.apply {
if (!status) {
title.text = getString(R.string.error_data)
description.setTextColor(Color.RED)
title.setTextColor(Color.RED)
lottie.setAnimation(R.raw.error_lottie)
}
description.text = txtDescription
btnOk.setOnClickListener {
listener?.invoke(Unit)
dismiss()
}
}
}
fun setOnClickListener(block: SingleBlock<Unit>) {
listener = block
}
override fun onDestroy() {
super.onDestroy()
_bn = null
}
}
...@@ -4,26 +4,19 @@ import android.annotation.SuppressLint ...@@ -4,26 +4,19 @@ import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import uz.ssd.mobiuz.AuthActivity import uz.ssd.mobiuz.AuthActivity
import uz.ssd.mobiuz.MainActivity
import uz.ssd.mobiuz.R import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentHomeBinding import uz.ssd.mobiuz.databinding.FragmentHomeBinding
import uz.ssd.mobiuz.model.SharedPref import uz.ssd.mobiuz.model.SharedPref
import uz.ssd.mobiuz.network.model.Customer import uz.ssd.mobiuz.network.model.Customer
import uz.ssd.mobiuz.network.model.UiStateObject import uz.ssd.mobiuz.network.model.UiStateObject
import uz.ssd.mobiuz.ui.base.BaseFragment import uz.ssd.mobiuz.ui.base.BaseFragment
import uz.ssd.mobiuz.utils.ButtonClick import uz.ssd.mobiuz.ui.global.ButtonClick
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.utils.extensions.*
import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showCustomExitDialog
import uz.ssd.mobiuz.utils.extensions.showMessage
import uz.ssd.mobiuz.utils.extensions.toMoneyFormat
import javax.inject.Inject import javax.inject.Inject
...@@ -86,7 +79,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { ...@@ -86,7 +79,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
} }
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
showProgressDialog(false) showProgressDialog(false)
showMessage(it.message) // showCustomDialog(it.message,false){}
} }
is UiStateObject.ERRORS -> { is UiStateObject.ERRORS -> {
...@@ -103,22 +96,28 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { ...@@ -103,22 +96,28 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun loadData() { private fun loadData() {
try {
customLog("customer:$customer")
customer?.customer?.info?.let { customer?.customer?.info?.let {
bn.apply { bn.apply {
txtBalance.text = "${it.balance.amount.toMoneyFormat()} ${it.balance.currency}" txtBalance.text = "${it.balance?.amount?.toMoneyFormat()} ${it.balance?.currency}"
it.counters.let { it.counters.let {
txtCountMb.text = it.BYTE.value.toMoneyFormat() txtCountMb.text = it?.BYTE?.value?.toMoneyFormat() ?: "0"
txtTypeMb.text = it.BYTE.unit txtTypeMb.text = it?.BYTE?.unit ?: "mb"
txtCountMinut.text = it.SECOND.value.toMoneyFormat() txtCountMinut.text = it?.SECOND?.value?.toMoneyFormat() ?: "0"
txtTypeMinut.text = it.SECOND.unit txtTypeMinut.text = it?.SECOND?.unit ?: "min"
txtCountSms.text = it.ITEM.value.toMoneyFormat() txtCountSms.text = it?.ITEM?.value?.toMoneyFormat() ?: "0"
txtTypeSms.text = it.ITEM.unit txtTypeSms.text = it?.ITEM?.unit ?: "sms"
} }
txtMyNumber.text = pref.userPhone txtMyNumber.text = pref.userPhone
} }
} }
}catch (e:Exception){
showCustomDialog(e.userMessage(requireContext()),false){}
}
} }
......
package uz.ssd.mobiuz.utils.extensions package uz.ssd.mobiuz.utils
import android.content.Context import android.content.Context
import android.view.View import android.view.View
......
...@@ -5,11 +5,13 @@ import android.content.Context ...@@ -5,11 +5,13 @@ import android.content.Context
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.gson.JsonSyntaxException import com.google.gson.JsonSyntaxException
import retrofit2.HttpException import retrofit2.HttpException
import uz.ssd.mobiuz.R import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.ui.base.ExitDialog import uz.ssd.mobiuz.ui.global.ExitDialog
import uz.ssd.mobiuz.ui.global.SenderDialog
import java.io.IOException import java.io.IOException
import java.net.ConnectException import java.net.ConnectException
...@@ -68,6 +70,22 @@ fun Fragment.showCustomExitDialog(block: () -> Unit) { ...@@ -68,6 +70,22 @@ fun Fragment.showCustomExitDialog(block: () -> Unit) {
dialog.show(childFragmentManager, "childFragmentManager") dialog.show(childFragmentManager, "childFragmentManager")
} }
fun Fragment.showCustomDialog(string: String, status: Boolean, block: () -> Unit) {
val dialog = SenderDialog(string, status)
dialog.setOnClickListener {
block()
}
dialog.show(childFragmentManager, "childFragmentManager")
}
fun FragmentActivity.showCustomDialog(string: String, status: Boolean, block: () -> Unit) {
val dialog = SenderDialog(string, status)
dialog.setOnClickListener {
block()
}
dialog.show(supportFragmentManager, "supportFragmentManager")
}
typealias SingleBlock<T> = (T) -> Unit typealias SingleBlock<T> = (T) -> Unit
typealias MultiBlock<T, K> = (T, K) -> Unit typealias MultiBlock<T, K> = (T, K) -> Unit
typealias ThreeBlock<T, K, M> = (T, K, M) -> Unit typealias ThreeBlock<T, K, M> = (T, K, M) -> Unit
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/gradient" android:background="@drawable/gradient"
android:orientation="vertical" android:orientation="vertical"
tools:context=".ui.auth.BiometricFragment"> tools:context=".ui.auth.biometric.BiometricFragment">
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:text="24 350 UZS" android:text="0 UZS"
android:id="@+id/txt_balance" android:id="@+id/txt_balance"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="20sp" android:textSize="20sp"
...@@ -133,7 +133,7 @@ ...@@ -133,7 +133,7 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Mobi 50" android:text="My tarif"
android:textSize="20sp" android:textSize="20sp"
android:textStyle="bold" /> android:textStyle="bold" />
...@@ -141,7 +141,7 @@ ...@@ -141,7 +141,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end" android:layout_gravity="end"
android:text="50 000 Сум/мес" android:text="0 Сум/мес"
android:textColor="@color/light" /> android:textColor="@color/light" />
</FrameLayout> </FrameLayout>
...@@ -181,7 +181,7 @@ ...@@ -181,7 +181,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginVertical="6dp" android:layout_marginVertical="6dp"
tools:text="4,5" android:text="0"
android:id="@+id/txt_count_mb" android:id="@+id/txt_count_mb"
android:textSize="20sp" android:textSize="20sp"
android:textStyle="bold" /> android:textStyle="bold" />
...@@ -190,7 +190,7 @@ ...@@ -190,7 +190,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
tools:text="гигабайт" android:text="mb"
android:id="@+id/txt_type_mb" android:id="@+id/txt_type_mb"
android:textColor="@color/light_dark" /> android:textColor="@color/light_dark" />
</LinearLayout> </LinearLayout>
...@@ -212,7 +212,7 @@ ...@@ -212,7 +212,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginVertical="6dp" android:layout_marginVertical="6dp"
tools:text="234" android:text="0"
android:id="@+id/txt_count_minut" android:id="@+id/txt_count_minut"
android:textSize="20sp" android:textSize="20sp"
android:textStyle="bold" /> android:textStyle="bold" />
...@@ -221,7 +221,7 @@ ...@@ -221,7 +221,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
tools:text="минут" android:text="min"
android:id="@+id/txt_type_minut" android:id="@+id/txt_type_minut"
android:textColor="@color/light_dark" /> android:textColor="@color/light_dark" />
</LinearLayout> </LinearLayout>
...@@ -243,7 +243,7 @@ ...@@ -243,7 +243,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginVertical="6dp" android:layout_marginVertical="6dp"
tools:text="500" android:text="0"
android:id="@+id/txt_count_sms" android:id="@+id/txt_count_sms"
android:textSize="20sp" android:textSize="20sp"
android:textStyle="bold" /> android:textStyle="bold" />
...@@ -252,7 +252,7 @@ ...@@ -252,7 +252,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
tools:text="SMS" android:text="SMS"
android:id="@+id/txt_type_sms" android:id="@+id/txt_type_sms"
android:textColor="@color/light_dark" /> android:textColor="@color/light_dark" />
</LinearLayout> </LinearLayout>
...@@ -282,7 +282,7 @@ ...@@ -282,7 +282,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end" android:layout_gravity="end"
android:text="22 Декабря" tools:text="22 Декабря"
android:textColor="@color/light_dark" android:textColor="@color/light_dark"
android:textStyle="bold" /> android:textStyle="bold" />
</FrameLayout> </FrameLayout>
......
...@@ -147,6 +147,20 @@ ...@@ -147,6 +147,20 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_input_confirm" /> app:layout_constraintTop_toBottomOf="@id/layout_input_confirm" />
<TextView
android:id="@+id/txt_helper_mobiuz"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/_6sdp"
android:text="@string/helper_mobiuz"
android:background="?android:selectableItemBackground"
android:textColor="@color/light_dark"
android:textStyle="bold"
android:layout_marginTop="@dimen/_6sdp"
android:layout_marginHorizontal="@dimen/_10sdp"
app:layout_constraintStart_toStartOf="@id/layout_input_password"
app:layout_constraintTop_toBottomOf="@id/txt_forget_password" />
<Button <Button
android:id="@+id/btn_login" android:id="@+id/btn_login"
android:layout_width="match_parent" android:layout_width="match_parent"
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" 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="wrap_content" android:layout_width="wrap_content"
app:cardCornerRadius="@dimen/_10sdp"
app:cardUseCompatPadding="true"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="18dp"> android:padding="18dp">
...@@ -17,5 +19,5 @@ ...@@ -17,5 +19,5 @@
app:lottie_speed="1" app:lottie_speed="1"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
</LinearLayout> </com.google.android.material.card.MaterialCardView>
...@@ -135,6 +135,20 @@ ...@@ -135,6 +135,20 @@
app:layout_constraintStart_toEndOf="@id/image_check" app:layout_constraintStart_toEndOf="@id/image_check"
app:layout_constraintTop_toBottomOf="@id/layout_input_confirm" /> app:layout_constraintTop_toBottomOf="@id/layout_input_confirm" />
<TextView
android:id="@+id/txt_helper_mobiuz"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/_6sdp"
android:text="@string/helper_mobiuz"
android:background="?android:selectableItemBackground"
android:textColor="@color/light_dark"
android:textStyle="bold"
android:layout_marginTop="@dimen/_6sdp"
android:layout_marginHorizontal="@dimen/_10sdp"
app:layout_constraintStart_toStartOf="@id/layout_input_password"
app:layout_constraintTop_toBottomOf="@id/txt_check_confirm" />
<Button <Button
android:id="@+id/btn_login" android:id="@+id/btn_login"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -28,14 +28,14 @@ ...@@ -28,14 +28,14 @@
<com.poovam.pinedittextfield.SquarePinField <com.poovam.pinedittextfield.SquarePinField
android:id="@+id/line_field" android:id="@+id/line_field"
android:layout_width="wrap_content" android:layout_width="@dimen/_220sdp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_12sdp" android:paddingHorizontal="@dimen/_14sdp"
android:layout_marginTop="@dimen/_80sdp" android:layout_marginTop="@dimen/_80sdp"
android:hint="******" android:hint="******"
android:orientation="horizontal" android:orientation="horizontal"
android:textColorHint="@color/black" android:textColorHint="@color/black"
android:textSize="@dimen/_14sdp" android:textSize="@dimen/_16sdp"
android:textStyle="bold" android:textStyle="bold"
android:textSelectHandle="@drawable/text_handle" android:textSelectHandle="@drawable/text_handle"
android:inputType="number" android:inputType="number"
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:cardUseCompatPadding="true"
app:cardBackgroundColor="@color/white" app:cardBackgroundColor="@color/white"
app:cardCornerRadius="12dp"> app:cardCornerRadius="12dp">
......
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardCornerRadius="12dp"
app:cardUseCompatPadding="true"
app:cardBackgroundColor="@color/white"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:orientation="vertical"
android:clickable="true"
android:minWidth="@dimen/_200sdp"
android:focusable="true"
android:layout_height="wrap_content">
<com.airbnb.lottie.LottieAnimationView
android:layout_width="80dp"
android:id="@+id/lottie"
android:layout_height="80dp"
android:adjustViewBounds="true"
app:lottie_autoPlay="true"
android:layout_gravity="center"
app:lottie_loop="true"
android:layout_marginTop="16dp"
app:lottie_rawRes="@raw/success_lottie"
app:lottie_speed="1"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textSize="16sp"
android:id="@+id/title"
android:textStyle="bold"
android:layout_marginHorizontal="26dp"
android:text="@string/successfully"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textSize="16sp"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:id="@+id/description"
android:layout_marginHorizontal="26dp"
android:text="description"
android:layout_height="wrap_content"/>
<View
android:layout_width="match_parent"
android:background="@color/light"
android:layout_height="1dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/btn_ok"
android:textSize="14sp"
android:textStyle="bold"
android:elevation="2dp"
android:paddingVertical="16dp"
android:gravity="center"
android:text="@string/ok"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</com.google.android.material.card.MaterialCardView>
\ No newline at end of file
...@@ -7,49 +7,40 @@ ...@@ -7,49 +7,40 @@
<fragment <fragment
android:id="@+id/checkPhoneFragment" android:id="@+id/checkPhoneFragment"
android:name="uz.ssd.mobiuz.ui.auth.CheckPhoneFragment" android:name="uz.ssd.mobiuz.ui.auth.check.CheckPhoneFragment"
android:label="fragment_login" android:label="fragment_login"
tools:layout="@layout/fragment_check_phone" /> tools:layout="@layout/fragment_check_phone" />
<fragment <fragment
android:id="@+id/verificationFragment" android:id="@+id/verificationFragment"
android:name="uz.ssd.mobiuz.ui.auth.VerificationFragment" android:name="uz.ssd.mobiuz.ui.auth.verification.VerificationFragment"
android:label="fragment_verification" android:label="fragment_verification"
tools:layout="@layout/fragment_verification" /> tools:layout="@layout/fragment_verification" />
<fragment <fragment
android:id="@+id/registerFragment" android:id="@+id/registerFragment"
android:name="uz.ssd.mobiuz.ui.auth.RegisterFragment" android:name="uz.ssd.mobiuz.ui.auth.register.RegisterFragment"
android:label="EnterPasswordFragment" android:label="EnterPasswordFragment"
tools:layout="@layout/fragment_register" /> tools:layout="@layout/fragment_register" />
<fragment <fragment
android:id="@+id/loginFragment" android:id="@+id/loginFragment"
android:name="uz.ssd.mobiuz.ui.auth.LoginFragment" android:name="uz.ssd.mobiuz.ui.auth.login.LoginFragment"
android:label="fragment_password" android:label="fragment_password"
tools:layout="@layout/fragment_login" /> tools:layout="@layout/fragment_login" />
<fragment
android:id="@+id/forgetPasswordFragment"
android:name="uz.ssd.mobiuz.ui.forget.ForgetPasswordFragment"
android:label="ForgetPasswordFragment"
tools:layout="@layout/fragment_forget_password" />
<fragment <fragment
android:id="@+id/pinFragment" android:id="@+id/pinFragment"
android:name="uz.ssd.mobiuz.ui.auth.PinFragment" android:name="uz.ssd.mobiuz.ui.auth.pin.PinFragment"
android:label="PinFragment" android:label="PinFragment"
tools:layout="@layout/fragment_pin" /> tools:layout="@layout/fragment_pin" />
<fragment <fragment
android:id="@+id/biometricFragment" android:id="@+id/biometricFragment"
android:name="uz.ssd.mobiuz.ui.auth.BiometricFragment" android:name="uz.ssd.mobiuz.ui.auth.biometric.BiometricFragment"
android:label="fragment_biometric" android:label="fragment_biometric"
tools:layout="@layout/fragment_biometric" /> tools:layout="@layout/fragment_biometric" />
<fragment <fragment
android:id="@+id/forgetVerificationFragment"
android:name="uz.ssd.mobiuz.ui.forget.ForgetVerificationFragment"
android:label="ForgetPinFragment"
tools:layout="@layout/fragment_pin" />
<fragment
android:id="@+id/confirmPinFragment" android:id="@+id/confirmPinFragment"
android:name="uz.ssd.mobiuz.ui.auth.ConfirmPinFragment" android:name="uz.ssd.mobiuz.ui.auth.pin.ConfirmPinFragment"
android:label="ConfirmPinFragment" android:label="ConfirmPinFragment"
tools:layout="@layout/fragment_pin" /> tools:layout="@layout/fragment_pin" />
</navigation> </navigation>
\ No newline at end of file
...@@ -73,5 +73,9 @@ ...@@ -73,5 +73,9 @@
<string name="are_you_sure">Do you want to exit?</string> <string name="are_you_sure">Do you want to exit?</string>
<string name="no">No</string> <string name="no">No</string>
<string name="yes">Yes</string> <string name="yes">Yes</string>
<string name="successfully">Successfully</string>
<string name="ok">Ok</string>
<string name="error_data">Error</string>
<string name="helper_mobiuz">Для входа вы можете использовать пароль от интернет-помощника www.mobi.uz</string>
</resources> </resources>
\ No newline at end of file
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