Commit 2acc7e5c authored by shohboz's avatar shohboz

[ADD] MUS-127, Feature added phone verification screen

parent 5bb4ebb8
package uz.ssd.mobiuz.ui.auth
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
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.MainActivity
import uz.ssd.mobiuz.R
import uz.ssd.mobiuz.databinding.FragmentVerificationBinding
import uz.ssd.mobiuz.model.UserAuth
......@@ -21,15 +19,17 @@ 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.customLog
import uz.ssd.mobiuz.utils.extensions.hideKeyboard
import uz.ssd.mobiuz.utils.extensions.showKeyboard
import uz.ssd.mobiuz.utils.extensions.showMessage
import java.lang.NullPointerException
@AndroidEntryPoint
class VerificationFragment : 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 viewModel: AuthViewModel by viewModels()
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
......@@ -46,14 +46,13 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
navController.navigateUp()
}
pinView.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(){
loadEdited()
btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
viewModel.login(UserAuth("phone", "password"))
}
......@@ -64,7 +63,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
sentCodeAgain.setTextColor(Color.parseColor("#FF9500"))
sentCodeAgain.setOnClickListener {
viewModel.login(UserAuth("",""))
// viewModel.login(UserAuth("",""))
count(true)
}
coutdownView.setOnCountdownEndListener {
......@@ -73,14 +72,185 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
}
}
private fun loadEdited() {
bn.apply {
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
viewGroup.setOnClickListener {
it.hideKeyboard()
}
frame.setOnClickListener {
pin1.text?.clear()
pin2.text?.clear()
pin3.text?.clear()
pin4.text?.clear()
pin5.text?.clear()
pin6.text?.clear()
pin1.showKeyboard()
}
pin1.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if (s.toString().isNotEmpty()) {
pin2.requestFocus()
pin1.setBackgroundResource(R.drawable.bgn_ver_checked)
} else {
pin1.setBackgroundResource(R.drawable.bgn_ver_unchecked)
}
}
})
pin2.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if (s.toString().isNotEmpty()) {
pin3.requestFocus()
pin2.setBackgroundResource(R.drawable.bgn_ver_checked)
} else {
pin1.requestFocus()
pin2.setBackgroundResource(R.drawable.bgn_ver_unchecked)
}
}
})
pin3.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if (s.toString().isNotEmpty()) {
pin4.requestFocus()
pin3.setBackgroundResource(R.drawable.bgn_ver_checked)
} else {
pin2.requestFocus()
pin3.setBackgroundResource(R.drawable.bgn_ver_unchecked)
}
}
})
pin4.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if (s.toString().isNotEmpty()) {
pin5.requestFocus()
pin4.setBackgroundResource(R.drawable.bgn_ver_checked)
} else {
pin3.requestFocus()
pin4.setBackgroundResource(R.drawable.bgn_ver_unchecked)
}
}
})
pin5.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if (s.toString().isNotEmpty()) {
pin6.requestFocus()
pin5.setBackgroundResource(R.drawable.bgn_ver_checked)
} else {
pin4.requestFocus()
pin5.setBackgroundResource(R.drawable.bgn_ver_unchecked)
}
}
})
pin6.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if (s.toString().isNotEmpty()) {
pin6.setBackgroundResource(R.drawable.bgn_ver_checked)
pin6.hideKeyboard()
btnLogin.isEnabled = true
} else {
pin5.requestFocus()
btnLogin.isEnabled = false
pin6.setBackgroundResource(R.drawable.bgn_ver_unchecked)
}
}
})
pin1.setOnKeyListener { _, keyCode, _ ->
if (keyCode == KeyEvent.KEYCODE_DEL) {
checkFocus().requestFocus()
}
false
}
pin2.setOnKeyListener { _, keyCode, _ ->
if (keyCode == KeyEvent.KEYCODE_DEL) {
checkFocus().requestFocus()
}
false
}
pin3.setOnKeyListener { _, keyCode, _ ->
if (keyCode == KeyEvent.KEYCODE_DEL) {
checkFocus().requestFocus()
}
false
}
pin4.setOnKeyListener { _, keyCode, _ ->
if (keyCode == KeyEvent.KEYCODE_DEL) {
checkFocus().requestFocus()
}
false
}
pin5.setOnKeyListener { _, keyCode, _ ->
if (keyCode == KeyEvent.KEYCODE_DEL) {
checkFocus().requestFocus()
}
false
}
pin6.setOnKeyListener { _, keyCode, _ ->
if (keyCode == KeyEvent.KEYCODE_DEL) {
checkFocus().requestFocus()
}
false
}
}
}
private fun checkFocus(): View {
bn.apply {
return when {
pin6.text.toString().trim().isNotEmpty() -> {
pin6.text?.clear()
return pin6
}
pin5.text.toString().trim().isNotEmpty() -> {
pin5.text?.clear()
return pin5
}
pin4.text.toString().trim().isNotEmpty() -> {
pin4.text?.clear()
return pin4
}
pin3.text.toString().trim().isNotEmpty() -> {
pin3.text?.clear()
return pin3
}
pin2.text.toString().trim().isNotEmpty() -> {
pin2.text?.clear()
return pin2
}
else -> {
pin1.text?.clear()
pin1
}
}
}
}
override fun collects() {
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.loginUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
requireActivity().finish()
startActivity(Intent(requireContext(),MainActivity::class.java))
navController.navigate(R.id.pinFragment, null, Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
......@@ -95,7 +265,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
}
}
fun count(status: Boolean) {
private fun count(status: Boolean) {
bn.apply {
sentCodeAgain.isVisible = !status
countWaitText.isVisible = status
......
......@@ -2,6 +2,7 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:id="@+id/view_group"
android:layout_height="match_parent"
android:orientation="vertical">
......@@ -10,36 +11,77 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_baseline_arrow_back"
/>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:id="@+id/pin_view"
app:layout_constraintTop_toTopOf="parent"
android:background="@drawable/bgn_lang"
android:padding="@dimen/_14sdp"
android:layout_marginHorizontal="@dimen/_12sdp"
android:gravity="center"
android:textSize="@dimen/_12sdp"
android:inputType="number"
android:imeOptions="actionDone"
app:layout_constraintBottom_toBottomOf="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_marginStart="@dimen/_16sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_verification"
android:textSize="@dimen/_16sdp"
android:textSize="@dimen/_20sdp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<FrameLayout
android:id="@+id/pin_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_80sdp"
android:layout_marginHorizontal="@dimen/_12sdp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/txt_enter_phone">
<LinearLayout
android:layout_width="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:layout_height="match_parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/pin_1"
style="@style/PinStyle"
android:background="@drawable/bgn_ver_unchecked" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/pin_2"
style="@style/PinStyle"
android:background="@drawable/bgn_ver_unchecked" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/pin_3"
style="@style/PinStyle"
android:background="@drawable/bgn_ver_unchecked" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/pin_4"
style="@style/PinStyle"
android:background="@drawable/bgn_ver_unchecked" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/pin_5"
style="@style/PinStyle"
android:background="@drawable/bgn_ver_unchecked" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/pin_6"
style="@style/PinStyle"
android:background="@drawable/bgn_ver_unchecked" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:id="@+id/frame"
android:visibility="visible"
android:layout_height="match_parent"/>
</FrameLayout>
<TextView
android:id="@+id/countWaitText"
android:layout_width="wrap_content"
......@@ -106,8 +148,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginHorizontal="@dimen/_12sdp"
android:layout_marginHorizontal="@dimen/_16sdp"
android:layout_marginTop="@dimen/_24sdp"
android:enabled="false"
android:text="@string/continuoue_task"
android:textSize="@dimen/_12sdp"
app:layout_constraintBottom_toBottomOf="parent"
......
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