Commit cd5e730d authored by shohboz's avatar shohboz

[REF] MUS-125 Feature, refactoring authorization screens names

parent a714b180
package uz.ssd.mobiuz.ui.forget package uz.ssd.mobiuz.ui.auth
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.animation.AnimationUtils
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
...@@ -10,10 +11,9 @@ import androidx.navigation.fragment.NavHostFragment ...@@ -10,10 +11,9 @@ 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 uz.ssd.mobiuz.R import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentLoginBinding 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.utils.ButtonClick
...@@ -23,9 +23,9 @@ import uz.ssd.mobiuz.utils.extensions.customLog ...@@ -23,9 +23,9 @@ import uz.ssd.mobiuz.utils.extensions.customLog
import uz.ssd.mobiuz.utils.extensions.showMessage import uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint @AndroidEntryPoint
class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) { class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
private var _bn: FragmentLoginBinding? = null private var _bn: FragmentCheckPhoneBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) } private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
var phone = "" var phone = ""
...@@ -34,7 +34,7 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -34,7 +34,7 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) {
private val viewModel: AuthViewModel by viewModels() private val viewModel: AuthViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentLoginBinding.bind(view) _bn = FragmentCheckPhoneBinding.bind(view)
setUpUI() setUpUI()
collects() collects()
...@@ -44,8 +44,7 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -44,8 +44,7 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
// txtEnterPhone.text = "Забыли пароль?" inputPhone.addTextChangedListener(object : TextWatcherWrapper() {
inputPhone.addTextChangedListener(object : TextWatcherWrapper(){
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count) super.onTextChanged(s, start, before, count)
customLog("s=${s?.toString()?.length}") customLog("s=${s?.toString()?.length}")
...@@ -57,11 +56,17 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -57,11 +56,17 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
phone = "+998" + inputPhone.unmaskedText.toString().trim() phone = "+998" + inputPhone.unmaskedText.toString().trim()
phoneRaw = inputPhone.text.toString().trim() phoneRaw = inputPhone.text.toString().trim()
viewModel.login(UserAuth(phone, "password")) when {
phone.length < 13 -> {
inputPhone.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
}
else -> viewModel.login(UserAuth(phone, null))
}
} }
}) })
toolbar.setNavigationOnClickListener { toolbar.setNavigationOnClickListener {
navController.navigateUp() requireActivity().finish()
} }
} }
} }
...@@ -72,7 +77,11 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -72,7 +77,11 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) {
when (it) { when (it) {
is UiStateObject.SUCCESS -> { is UiStateObject.SUCCESS -> {
showProgressDialog(false) showProgressDialog(false)
navController.navigate(R.id.forgetVerificationFragment, null, Utils.navOptions()) if (it.data.action == "login") {
navController.navigate(R.id.loginFragment, bundleOf(CONSTANTS.PHONE to phoneRaw), Utils.navOptions())
} else if (it.data.action == "register") {
navController.navigate(R.id.registerFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions())
}
} }
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
showProgressDialog(false) showProgressDialog(false)
...@@ -91,4 +100,4 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -91,4 +100,4 @@ class ForgetLoginFragment : BaseFragment(R.layout.fragment_login) {
_bn = null _bn = null
super.onDestroy() super.onDestroy()
} }
} }
\ No newline at end of file
...@@ -20,7 +20,6 @@ import uz.ssd.mobiuz.model.PinData ...@@ -20,7 +20,6 @@ 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.Utils import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showMessage
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
...@@ -40,7 +39,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) { ...@@ -40,7 +39,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
arguments?.let { arguments?.let {
pinCode = it.getString("pinCode","") ?: "" pinCode = it.getString("pinCode", "") ?: ""
} }
} }
...@@ -65,13 +64,13 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) { ...@@ -65,13 +64,13 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
pinAdapter.setOnDoneListener { pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
delay(500) delay(500)
if (pinCode == it) { if (pinCode == it) {
pref.pin_code = pinCode pref.pin_code = pinCode
txtNotPin.isVisible = false txtNotPin.isVisible = false
navigate() navigate()
} else { } else {
txtNotPin.isVisible = true txtNotPin.isVisible = true
} }
} }
} }
...@@ -98,10 +97,10 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) { ...@@ -98,10 +97,10 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
val manager = FingerprintManagerCompat.from(requireContext()) val manager = FingerprintManagerCompat.from(requireContext())
val isEnabled = manager.isHardwareDetected && manager.hasEnrolledFingerprints() val isEnabled = manager.isHardwareDetected && manager.hasEnrolledFingerprints()
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)) startActivity(Intent(requireContext(), MainActivity::class.java))
requireActivity().finish() requireActivity().finish()
} }
} }
......
...@@ -2,7 +2,6 @@ package uz.ssd.mobiuz.ui.auth ...@@ -2,7 +2,6 @@ package uz.ssd.mobiuz.ui.auth
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.animation.AnimationUtils
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
...@@ -19,7 +18,6 @@ import uz.ssd.mobiuz.ui.global.TextWatcherWrapper ...@@ -19,7 +18,6 @@ import uz.ssd.mobiuz.ui.global.TextWatcherWrapper
import uz.ssd.mobiuz.utils.ButtonClick import uz.ssd.mobiuz.utils.ButtonClick
import uz.ssd.mobiuz.utils.CONSTANTS import uz.ssd.mobiuz.utils.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.showMessage import uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint @AndroidEntryPoint
...@@ -28,45 +26,66 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -28,45 +26,66 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
private var _bn: FragmentLoginBinding? = null private var _bn: FragmentLoginBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) } private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
var phone = "" private var phone = ""
var phoneRaw = ""
private val viewModel: AuthViewModel by viewModels() private val viewModel: AuthViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
phone = it.getString(CONSTANTS.PHONE, "")
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentLoginBinding.bind(view) _bn = FragmentLoginBinding.bind(view)
setUpUI() setUpUI()
collects() collects()
} }
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
inputPhone.addTextChangedListener(object : TextWatcherWrapper() { inputPhone.setText(phone)
txtForgetPassword.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navController.navigate(R.id.forgetVerificationFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions())
}
})
inputPassword.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count) super.onTextChanged(s, start, before, count)
customLog("s=${s?.toString()?.length}") btnLogin.isEnabled = (s.toString().length > 5)
btnLogin.isEnabled = inputPhone.text.toString().trim().length == 17
} }
}) })
btnLogin.setOnClickListener(object : ButtonClick() { btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
phone = "+998" + inputPhone.unmaskedText.toString().trim() val password = inputPassword.text.toString().trim()
phoneRaw = inputPhone.text.toString().trim()
when { when {
phone.length < 13 -> { password.length < 6 -> {
inputPhone.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake)) inputPassword.startAnimation(
android.view.animation.AnimationUtils.loadAnimation(
requireContext(),
R.anim.shake
)
)
}
else -> {
viewModel.login(UserAuth(phone.replace(" ", ""), password))
} }
else -> viewModel.login(UserAuth(phone, null))
} }
} }
}) })
toolbar.setNavigationOnClickListener { toolbar.setNavigationOnClickListener {
requireActivity().finish() navController.navigateUp()
} }
} }
} }
...@@ -77,14 +96,16 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -77,14 +96,16 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
when (it) { when (it) {
is UiStateObject.SUCCESS -> { is UiStateObject.SUCCESS -> {
showProgressDialog(false) showProgressDialog(false)
if (it.data.action == "login") { navController.navigate(R.id.verificationFragment, null, Utils.navOptions())
navController.navigate(R.id.passwordFragment, bundleOf(CONSTANTS.PHONE to phoneRaw), Utils.navOptions())
} else if (it.data.action == "register"){
navController.navigate(R.id.enterPasswordFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions())
}
} }
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
showProgressDialog(false) showProgressDialog(false)
bn.inputPassword.startAnimation(
android.view.animation.AnimationUtils.loadAnimation(
requireContext(),
R.anim.shake
)
)
showMessage(it.message) showMessage(it.message)
} }
is UiStateObject.LOADING -> { is UiStateObject.LOADING -> {
......
package uz.ssd.mobiuz.ui.auth
import android.os.Bundle
import android.view.View
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.FragmentPasswordBinding
import uz.ssd.mobiuz.model.UserAuth
import uz.ssd.mobiuz.network.model.UiStateObject
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.CONSTANTS
import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint
class PasswordFragment : BaseFragment(R.layout.fragment_password) {
private var _bn: FragmentPasswordBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var phone = ""
private val viewModel: AuthViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
phone = it.getString(CONSTANTS.PHONE, "")
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentPasswordBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
inputPhone.setText(phone)
txtForgetPassword.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navController.navigate(R.id.forgetLoginFragment,null,Utils.navOptions())
}
})
inputPassword.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
btnLogin.isEnabled = (s.toString().length > 5)
}
})
btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
val password = inputPassword.text.toString().trim()
when{
password.length < 6 -> {
inputPassword.startAnimation(
android.view.animation.AnimationUtils.loadAnimation(
requireContext(),
R.anim.shake
)
)
}
else ->{
viewModel.login(UserAuth(phone.replace(" ",""), password))
}
}
}
})
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
}
}
override fun collects() {
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.loginUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(R.id.verificationFragment, null, Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
bn.inputPassword.startAnimation(
android.view.animation.AnimationUtils.loadAnimation(
requireContext(),
R.anim.shake
)
)
showMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
...@@ -11,7 +11,7 @@ import androidx.navigation.fragment.NavHostFragment ...@@ -11,7 +11,7 @@ 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 uz.ssd.mobiuz.R import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentEnterPasswordBinding 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.base.BaseFragment import uz.ssd.mobiuz.ui.base.BaseFragment
...@@ -22,9 +22,9 @@ import uz.ssd.mobiuz.utils.Utils ...@@ -22,9 +22,9 @@ import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showMessage import uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint @AndroidEntryPoint
class EnterPasswordFragment : BaseFragment(R.layout.fragment_enter_password) { class RegisterFragment : BaseFragment(R.layout.fragment_register) {
private var _bn: FragmentEnterPasswordBinding? = null private var _bn: FragmentRegisterBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) } private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
...@@ -34,12 +34,12 @@ class EnterPasswordFragment : BaseFragment(R.layout.fragment_enter_password) { ...@@ -34,12 +34,12 @@ class EnterPasswordFragment : BaseFragment(R.layout.fragment_enter_password) {
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) ?: ""
} }
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentEnterPasswordBinding.bind(view) _bn = FragmentRegisterBinding.bind(view)
setUpUI() setUpUI()
collects() collects()
...@@ -78,12 +78,12 @@ class EnterPasswordFragment : BaseFragment(R.layout.fragment_enter_password) { ...@@ -78,12 +78,12 @@ class EnterPasswordFragment : BaseFragment(R.layout.fragment_enter_password) {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
val password = inputPassword.text.toString().trim() val password = inputPassword.text.toString().trim()
val confirm = inputConfirm.text.toString().trim() val confirm = inputConfirm.text.toString().trim()
when{ when {
password.length < 5 || password != confirm ->{ password.length < 5 || password != confirm -> {
} }
else ->{ else -> {
viewModel.register(UserAuth(phone.replace(" ",""), password)) viewModel.register(UserAuth(phone.replace(" ", ""), password))
} }
} }
......
package uz.ssd.mobiuz.ui.forget package uz.ssd.mobiuz.ui.forget
import uz.ssd.mobiuz.ui.auth.AuthViewModel
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.view.isVisible import androidx.core.view.isVisible
...@@ -12,9 +10,10 @@ import androidx.navigation.fragment.NavHostFragment ...@@ -12,9 +10,10 @@ 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 uz.ssd.mobiuz.R import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentEnterPasswordBinding 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.TextWatcherWrapper import uz.ssd.mobiuz.ui.global.TextWatcherWrapper
import uz.ssd.mobiuz.utils.ButtonClick import uz.ssd.mobiuz.utils.ButtonClick
...@@ -22,16 +21,16 @@ import uz.ssd.mobiuz.utils.Utils ...@@ -22,16 +21,16 @@ import uz.ssd.mobiuz.utils.Utils
import uz.ssd.mobiuz.utils.extensions.showMessage import uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint @AndroidEntryPoint
class ForgetPasswordFragment : BaseFragment(R.layout.fragment_enter_password) { class ForgetPasswordFragment : BaseFragment(R.layout.fragment_register) {
private var _bn: FragmentEnterPasswordBinding? = null private var _bn: FragmentRegisterBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) } private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val viewModel: AuthViewModel by viewModels() private val viewModel: AuthViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentEnterPasswordBinding.bind(view) _bn = FragmentRegisterBinding.bind(view)
setUpUI() setUpUI()
collects() collects()
......
...@@ -20,6 +20,7 @@ import uz.ssd.mobiuz.ui.auth.AuthViewModel ...@@ -20,6 +20,7 @@ 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.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.hideKeyboard import uz.ssd.mobiuz.utils.extensions.hideKeyboard
import uz.ssd.mobiuz.utils.extensions.showKeyboard import uz.ssd.mobiuz.utils.extensions.showKeyboard
...@@ -34,6 +35,14 @@ class ForgetVerificationFragment : BaseFragment(R.layout.fragment_verification) ...@@ -34,6 +35,14 @@ class ForgetVerificationFragment : BaseFragment(R.layout.fragment_verification)
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) } private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
var code = "" 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?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentVerificationBinding.bind(view) _bn = FragmentVerificationBinding.bind(view)
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationIcon="@drawable/ic_baseline_arrow_back"
/>
<TextView
android:id="@+id/txt_enter_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_number"
android:textSize="@dimen/_18sdp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:gravity="center"
android:layout_height="0dp"
android:layout_weight="1">
<TextView
android:id="@+id/hint_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/phone"
android:layout_marginStart="@dimen/_12sdp"
android:layout_gravity="start"
android:textColor="@color/light"
android:textStyle="bold"
/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginEnd="@dimen/_12sdp">
<com.github.pinball83.maskededittext.MaskedEditText
android:layout_width="match_parent"
android:id="@+id/input_phone"
android:inputType="phone"
android:imeOptions="actionDone"
app:mask="+998 ** *** ** **"
app:notMaskedSymbol="*"
android:textSize="@dimen/_12sdp"
android:padding="@dimen/_14sdp"
android:background="@drawable/edit_text_bgn"
android:layout_height="match_parent"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.5">
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:enabled="false"
android:textSize="@dimen/_12sdp"
android:layout_marginHorizontal="@dimen/_12sdp"
android:layout_marginTop="@dimen/_24sdp"
android:text="@string/continuoue" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
...@@ -10,8 +10,9 @@ ...@@ -10,8 +10,9 @@
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_baseline_arrow_back" app:navigationIcon="@drawable/ic_baseline_arrow_back"
/> />
<TextView <TextView
...@@ -20,65 +21,115 @@ ...@@ -20,65 +21,115 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp" android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp" android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_number" android:text="@string/enter"
android:textSize="@dimen/_18sdp" android:textSize="@dimen/_18sdp"
android:textStyle="bold" /> android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/txt_hint_password"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<LinearLayout <TextView
android:id="@+id/txt_hint_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:text="@string/phone"
android:textColor="@color/black"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/layout_input_password"
app:layout_constraintTop_toBottomOf="@id/txt_enter_phone" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_input_password"
android:layout_width="match_parent" android:layout_width="match_parent"
android:orientation="vertical" android:layout_height="wrap_content"
android:gravity="center" android:layout_gravity="center"
android:layout_height="0dp" android:layout_marginStart="@dimen/_12sdp"
android:layout_weight="1"> android:layout_marginEnd="@dimen/_12sdp"
<TextView android:layout_marginBottom="@dimen/_140sdp"
android:id="@+id/hint_phone" app:layout_constraintBottom_toTopOf="@id/txt_hint_password"
android:layout_width="wrap_content" app:layout_constraintTop_toBottomOf="@id/txt_hint_password">
android:layout_height="wrap_content"
android:text="@string/phone"
android:layout_marginStart="@dimen/_12sdp"
android:layout_gravity="start"
android:textColor="@color/light"
android:textStyle="bold"
/>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputEditText
android:id="@+id/layout_input" android:id="@+id/input_phone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_gravity="center" android:clickable="false"
android:layout_marginStart="@dimen/_12sdp" android:focusable="false"
android:layout_marginEnd="@dimen/_12sdp"> android:textSize="@dimen/_12sdp"
android:background="@drawable/edit_text_bgn"
android:imeOptions="actionNext"
android:inputType="phone"
android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp" />
</com.google.android.material.textfield.TextInputLayout>
<com.github.pinball83.maskededittext.MaskedEditText
android:layout_width="match_parent"
android:id="@+id/input_phone"
android:inputType="phone"
android:imeOptions="actionDone"
app:mask="+998 ** *** ** **"
app:notMaskedSymbol="*"
android:textSize="@dimen/_12sdp"
android:padding="@dimen/_14sdp"
android:background="@drawable/edit_text_bgn"
android:layout_height="match_parent"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout <TextView
android:id="@+id/txt_hint_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_34sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:text="@string/password"
android:textColor="@color/black"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@id/layout_input_confirm"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_input_confirm"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="wrap_content"
android:layout_weight="1.5"> android:layout_gravity="center"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginEnd="@dimen/_12sdp"
app:endIconMode="password_toggle"
app:layout_constraintTop_toBottomOf="@id/txt_hint_confirm">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/edit_text_bgn"
android:imeOptions="actionDone"
android:inputType="number"
android:maxLength="7"
android:textSize="@dimen/_12sdp"
android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp"
tools:ignore="RtlSymmetry" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/txt_forget_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_6sdp"
android:text="@string/forget_password"
android:background="?android:selectableItemBackground"
android:textColor="@color/light_dark"
android:textStyle="bold"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginEnd="@dimen/_10sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_input_confirm" />
<Button <Button
android:id="@+id/btn_login" android:id="@+id/btn_login"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:enabled="false" android:enabled="false"
android:textSize="@dimen/_12sdp" android:textSize="@dimen/_12sdp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginHorizontal="@dimen/_12sdp" android:layout_marginHorizontal="@dimen/_12sdp"
android:layout_marginTop="@dimen/_24sdp" android:layout_marginTop="@dimen/_34sdp"
android:text="@string/continuoue" /> android:text="@string/enter"
app:layout_constraintTop_toBottomOf="@id/layout_input_confirm"
app:layout_constraintBottom_toBottomOf="parent" />
</LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> \ No newline at end of file
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_baseline_arrow_back"
/>
<TextView
android:id="@+id/txt_enter_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter"
android:textSize="@dimen/_18sdp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/txt_hint_password"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<TextView
android:id="@+id/txt_hint_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:text="@string/phone"
android:textColor="@color/black"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/layout_input_password"
app:layout_constraintTop_toBottomOf="@id/txt_enter_phone" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginEnd="@dimen/_12sdp"
android:layout_marginBottom="@dimen/_140sdp"
app:layout_constraintBottom_toTopOf="@id/txt_hint_password"
app:layout_constraintTop_toBottomOf="@id/txt_hint_password">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_phone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"
android:focusable="false"
android:textSize="@dimen/_12sdp"
android:background="@drawable/edit_text_bgn"
android:imeOptions="actionNext"
android:inputType="phone"
android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/txt_hint_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_34sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:text="@string/password"
android:textColor="@color/black"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@id/layout_input_confirm"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_input_confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginEnd="@dimen/_12sdp"
app:endIconMode="password_toggle"
app:layout_constraintTop_toBottomOf="@id/txt_hint_confirm">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/edit_text_bgn"
android:imeOptions="actionDone"
android:inputType="number"
android:maxLength="7"
android:textSize="@dimen/_12sdp"
android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp"
tools:ignore="RtlSymmetry" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/txt_forget_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_6sdp"
android:text="@string/forget_password"
android:background="?android:selectableItemBackground"
android:textColor="@color/light_dark"
android:textStyle="bold"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginEnd="@dimen/_10sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_input_confirm" />
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:enabled="false"
android:textSize="@dimen/_12sdp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginHorizontal="@dimen/_12sdp"
android:layout_marginTop="@dimen/_34sdp"
android:text="@string/enter"
app:layout_constraintTop_toBottomOf="@id/layout_input_confirm"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
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:id="@+id/nav_graph_auth" android:id="@+id/nav_graph_auth"
app:startDestination="@id/loginFragment"> app:startDestination="@id/checkPhoneFragment">
<fragment <fragment
android:id="@+id/loginFragment" android:id="@+id/checkPhoneFragment"
android:name="uz.ssd.mobiuz.ui.auth.LoginFragment" android:name="uz.ssd.mobiuz.ui.auth.CheckPhoneFragment"
android:label="fragment_login" android:label="fragment_login"
tools:layout="@layout/fragment_login" /> tools:layout="@layout/fragment_check_phone" />
<fragment <fragment
android:id="@+id/verificationFragment" android:id="@+id/verificationFragment"
...@@ -17,15 +17,15 @@ ...@@ -17,15 +17,15 @@
android:label="fragment_verification" android:label="fragment_verification"
tools:layout="@layout/fragment_verification" /> tools:layout="@layout/fragment_verification" />
<fragment <fragment
android:id="@+id/enterPasswordFragment" android:id="@+id/registerFragment"
android:name="uz.ssd.mobiuz.ui.auth.EnterPasswordFragment" android:name="uz.ssd.mobiuz.ui.auth.RegisterFragment"
android:label="EnterPasswordFragment" android:label="EnterPasswordFragment"
tools:layout="@layout/fragment_enter_password" /> tools:layout="@layout/fragment_register" />
<fragment <fragment
android:id="@+id/passwordFragment" android:id="@+id/loginFragment"
android:name="uz.ssd.mobiuz.ui.auth.PasswordFragment" android:name="uz.ssd.mobiuz.ui.auth.LoginFragment"
android:label="fragment_password" android:label="fragment_password"
tools:layout="@layout/fragment_password" /> tools:layout="@layout/fragment_login" />
<fragment <fragment
android:id="@+id/forgetPasswordFragment" android:id="@+id/forgetPasswordFragment"
android:name="uz.ssd.mobiuz.ui.forget.ForgetPasswordFragment" android:name="uz.ssd.mobiuz.ui.forget.ForgetPasswordFragment"
...@@ -41,11 +41,7 @@ ...@@ -41,11 +41,7 @@
android:name="uz.ssd.mobiuz.ui.auth.BiometricFragment" android:name="uz.ssd.mobiuz.ui.auth.BiometricFragment"
android:label="fragment_biometric" android:label="fragment_biometric"
tools:layout="@layout/fragment_biometric" /> tools:layout="@layout/fragment_biometric" />
<fragment
android:id="@+id/forgetLoginFragment"
android:name="uz.ssd.mobiuz.ui.forget.ForgetLoginFragment"
android:label="ForgetLoginFragment"
tools:layout="@layout/fragment_login" />
<fragment <fragment
android:id="@+id/forgetVerificationFragment" android:id="@+id/forgetVerificationFragment"
android:name="uz.ssd.mobiuz.ui.forget.ForgetVerificationFragment" android:name="uz.ssd.mobiuz.ui.forget.ForgetVerificationFragment"
......
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