Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
shunchaki
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Shohboz Qoraboev
shunchaki
Commits
2acc7e5c
Commit
2acc7e5c
authored
Dec 01, 2021
by
shohboz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ADD]
MUS-127
, Feature added phone verification screen
parent
5bb4ebb8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
249 additions
and
36 deletions
+249
-36
VerificationFragment.kt
...c/main/java/uz/ssd/mobiuz/ui/auth/VerificationFragment.kt
+186
-16
fragment_verification.xml
app/src/main/res/layout/fragment_verification.xml
+63
-20
No files found.
app/src/main/java/uz/ssd/mobiuz/ui/auth/VerificationFragment.kt
View file @
2acc7e5c
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
...
...
app/src/main/res/layout/fragment_verification.xml
View file @
2acc7e5c
...
...
@@ -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/_1
2
sdp"
android:layout_marginStart=
"@dimen/_1
6
sdp"
android:layout_marginTop=
"@dimen/_14sdp"
android:text=
"@string/enter_verification"
android:textSize=
"@dimen/_
16
sdp"
android:textSize=
"@dimen/_
20
sdp"
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/_1
2
sdp"
android:layout_marginHorizontal=
"@dimen/_1
6
sdp"
android:layout_marginTop=
"@dimen/_24sdp"
android:enabled=
"false"
android:text=
"@string/continuoue_task"
android:textSize=
"@dimen/_12sdp"
app:layout_constraintBottom_toBottomOf=
"parent"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment