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
a9f50c61
Commit
a9f50c61
authored
Dec 02, 2021
by
shohboz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ADD]
MUS-136
Feature, add forget password screens
parent
346220d6
Changes
29
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
743 additions
and
176 deletions
+743
-176
deploymentTargetDropDown.xml
.idea/deploymentTargetDropDown.xml
+0
-17
misc.xml
.idea/misc.xml
+15
-0
LanguageActivity.kt
app/src/main/java/uz/ssd/mobiuz/LanguageActivity.kt
+0
-2
SplashActivity.kt
app/src/main/java/uz/ssd/mobiuz/SplashActivity.kt
+2
-1
SharedPref.kt
app/src/main/java/uz/ssd/mobiuz/model/SharedPref.kt
+6
-0
ForgetPasswordFragment.kt
...main/java/uz/ssd/mobiuz/ui/auth/ForgetPasswordFragment.kt
+0
-40
LoginFragment.kt
app/src/main/java/uz/ssd/mobiuz/ui/auth/LoginFragment.kt
+1
-1
PasswordFragment.kt
app/src/main/java/uz/ssd/mobiuz/ui/auth/PasswordFragment.kt
+1
-1
ForgetLoginFragment.kt
.../main/java/uz/ssd/mobiuz/ui/forget/ForgetLoginFragment.kt
+94
-0
ForgetPasswordFragment.kt
...in/java/uz/ssd/mobiuz/ui/forget/ForgetPasswordFragment.kt
+107
-0
ForgetVerificationFragment.kt
...ava/uz/ssd/mobiuz/ui/forget/ForgetVerificationFragment.kt
+284
-0
SoftKeyboard.kt
.../main/java/uz/ssd/mobiuz/utils/extensions/SoftKeyboard.kt
+21
-0
bgn_lang.xml
app/src/main/res/drawable/bgn_lang.xml
+3
-0
bgn_splash.png
app/src/main/res/drawable/bgn_splash.png
+0
-0
edit_text_bgn.xml
app/src/main/res/drawable/edit_text_bgn.xml
+5
-0
edit_text_checked.xml
app/src/main/res/drawable/edit_text_checked.xml
+10
-0
edit_text_unchecked.xml
app/src/main/res/drawable/edit_text_unchecked.xml
+6
-0
gradient.png
app/src/main/res/drawable/gradient.png
+0
-0
activity_language.xml
app/src/main/res/layout/activity_language.xml
+74
-65
activity_splash.xml
app/src/main/res/layout/activity_splash.xml
+1
-1
fragment_biometric.xml
app/src/main/res/layout/fragment_biometric.xml
+40
-30
fragment_enter_password.xml
app/src/main/res/layout/fragment_enter_password.xml
+4
-4
fragment_forget_password.xml
app/src/main/res/layout/fragment_forget_password.xml
+1
-1
fragment_login.xml
app/src/main/res/layout/fragment_login.xml
+3
-3
fragment_password.xml
app/src/main/res/layout/fragment_password.xml
+3
-3
nav_graph_auth.xml
app/src/main/res/navigation/nav_graph_auth.xml
+21
-1
colors.xml
app/src/main/res/values/colors.xml
+1
-0
strings.xml
app/src/main/res/values/strings.xml
+3
-1
themes.xml
app/src/main/res/values/themes.xml
+37
-5
No files found.
.idea/deploymentTargetDropDown.xml
deleted
100644 → 0
View file @
346220d6
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"deploymentTargetDropDown"
>
<targetSelectedWithDropDown>
<Target>
<type
value=
"QUICK_BOOT_TARGET"
/>
<deviceKey>
<Key>
<type
value=
"VIRTUAL_DEVICE_PATH"
/>
<value
value=
"$USER_HOME$/.android/avd/Pixel_3_API_30.avd"
/>
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown
value=
"2021-11-29T09:58:34.680451Z"
/>
</component>
</project>
\ No newline at end of file
.idea/misc.xml
View file @
a9f50c61
...
@@ -4,9 +4,16 @@
...
@@ -4,9 +4,16 @@
<option
name=
"filePathToZoomLevelMap"
>
<option
name=
"filePathToZoomLevelMap"
>
<map>
<map>
<entry
key=
"app/src/main/res/drawable/bgn_lang.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/bgn_lang.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/bgn_pin_btn.xml"
value=
"0.26525096525096525"
/>
<entry
key=
"app/src/main/res/drawable/bgn_pin_checked.xml"
value=
"0.26525096525096525"
/>
<entry
key=
"app/src/main/res/drawable/bgn_ver_checked.xml"
value=
"0.26525096525096525"
/>
<entry
key=
"app/src/main/res/drawable/bgn_ver_unchecked.xml"
value=
"0.26525096525096525"
/>
<entry
key=
"app/src/main/res/drawable/button_default_bg.xml"
value=
"0.30092592592592593"
/>
<entry
key=
"app/src/main/res/drawable/button_default_bg.xml"
value=
"0.30092592592592593"
/>
<entry
key=
"app/src/main/res/drawable/button_false_bg.xml"
value=
"0.30092592592592593"
/>
<entry
key=
"app/src/main/res/drawable/button_false_bg.xml"
value=
"0.30092592592592593"
/>
<entry
key=
"app/src/main/res/drawable/button_selector.xml"
value=
"0.30092592592592593"
/>
<entry
key=
"app/src/main/res/drawable/button_selector.xml"
value=
"0.30092592592592593"
/>
<entry
key=
"app/src/main/res/drawable/edit_text_bgn.xml"
value=
"0.26525096525096525"
/>
<entry
key=
"app/src/main/res/drawable/edit_text_checked.xml"
value=
"0.26525096525096525"
/>
<entry
key=
"app/src/main/res/drawable/edit_text_unchecked.xml"
value=
"0.26525096525096525"
/>
<entry
key=
"app/src/main/res/drawable/ic_background.xml"
value=
"0.2759259259259259"
/>
<entry
key=
"app/src/main/res/drawable/ic_background.xml"
value=
"0.2759259259259259"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_account_box.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_account_box.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_arrow_back.xml"
value=
"0.2759259259259259"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_arrow_back.xml"
value=
"0.2759259259259259"
/>
...
@@ -14,6 +21,7 @@
...
@@ -14,6 +21,7 @@
<entry
key=
"app/src/main/res/drawable/ic_baseline_check_circle.xml"
value=
"0.20694444444444443"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_check_circle.xml"
value=
"0.20694444444444443"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_home.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_home.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_keyboard_arrow_right.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_baseline_keyboard_arrow_right.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_fingerprint.xml"
value=
"0.26525096525096525"
/>
<entry
key=
"app/src/main/res/drawable/ic_group_12.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_group_12.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_russia.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_russia.xml"
value=
"0.2796296296296296"
/>
<entry
key=
"app/src/main/res/drawable/ic_vector_error.xml"
value=
"0.20694444444444443"
/>
<entry
key=
"app/src/main/res/drawable/ic_vector_error.xml"
value=
"0.20694444444444443"
/>
...
@@ -23,16 +31,23 @@
...
@@ -23,16 +31,23 @@
<entry
key=
"app/src/main/res/layout/activity_pin.xml"
value=
"0.3052536231884058"
/>
<entry
key=
"app/src/main/res/layout/activity_pin.xml"
value=
"0.3052536231884058"
/>
<entry
key=
"app/src/main/res/layout/activity_splash.xml"
value=
"0.29936594202898553"
/>
<entry
key=
"app/src/main/res/layout/activity_splash.xml"
value=
"0.29936594202898553"
/>
<entry
key=
"app/src/main/res/layout/button_selector.xml"
value=
"0.33242753623188404"
/>
<entry
key=
"app/src/main/res/layout/button_selector.xml"
value=
"0.33242753623188404"
/>
<entry
key=
"app/src/main/res/layout/fragment_base.xml"
value=
"0.23497267759562843"
/>
<entry
key=
"app/src/main/res/layout/fragment_biometric.xml"
value=
"0.23497267759562843"
/>
<entry
key=
"app/src/main/res/layout/fragment_blank.xml"
value=
"0.18385416666666668"
/>
<entry
key=
"app/src/main/res/layout/fragment_blank.xml"
value=
"0.18385416666666668"
/>
<entry
key=
"app/src/main/res/layout/fragment_enter_password.xml"
value=
"0.22"
/>
<entry
key=
"app/src/main/res/layout/fragment_enter_password.xml"
value=
"0.22"
/>
<entry
key=
"app/src/main/res/layout/fragment_forget_password.xml"
value=
"0.21174863387978143"
/>
<entry
key=
"app/src/main/res/layout/fragment_forget_password.xml"
value=
"0.21174863387978143"
/>
<entry
key=
"app/src/main/res/layout/fragment_home.xml"
value=
"0.18385416666666668"
/>
<entry
key=
"app/src/main/res/layout/fragment_home.xml"
value=
"0.18385416666666668"
/>
<entry
key=
"app/src/main/res/layout/fragment_login.xml"
value=
"0.2"
/>
<entry
key=
"app/src/main/res/layout/fragment_login.xml"
value=
"0.2"
/>
<entry
key=
"app/src/main/res/layout/fragment_password.xml"
value=
"0.2"
/>
<entry
key=
"app/src/main/res/layout/fragment_password.xml"
value=
"0.2"
/>
<entry
key=
"app/src/main/res/layout/fragment_pin.xml"
value=
"0.23497267759562843"
/>
<entry
key=
"app/src/main/res/layout/fragment_pin_lock.xml"
value=
"0.23497267759562843"
/>
<entry
key=
"app/src/main/res/layout/fragment_progress.xml"
value=
"0.33242753623188404"
/>
<entry
key=
"app/src/main/res/layout/fragment_progress.xml"
value=
"0.33242753623188404"
/>
<entry
key=
"app/src/main/res/layout/fragment_register.xml"
value=
"0.33242753623188404"
/>
<entry
key=
"app/src/main/res/layout/fragment_register.xml"
value=
"0.33242753623188404"
/>
<entry
key=
"app/src/main/res/layout/fragment_verification.xml"
value=
"0.2"
/>
<entry
key=
"app/src/main/res/layout/fragment_verification.xml"
value=
"0.2"
/>
<entry
key=
"app/src/main/res/layout/item_confirm.xml"
value=
"0.23497267759562843"
/>
<entry
key=
"app/src/main/res/layout/item_home.xml"
value=
"0.29936594202898553"
/>
<entry
key=
"app/src/main/res/layout/item_home.xml"
value=
"0.29936594202898553"
/>
<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/menu/bottom_nav_menu.xml"
value=
"0.3416666666666667"
/>
<entry
key=
"app/src/main/res/menu/bottom_nav_menu.xml"
value=
"0.3416666666666667"
/>
</map>
</map>
</option>
</option>
...
...
app/src/main/java/uz/ssd/mobiuz/LanguageActivity.kt
View file @
a9f50c61
package
uz.ssd.mobiuz
package
uz.ssd.mobiuz
import
android.content.Intent
import
android.content.Intent
import
android.graphics.Color
import
android.os.Bundle
import
android.os.Bundle
import
android.view.View
import
android.view.View
import
android.view.WindowManager
import
androidx.appcompat.app.AppCompatActivity
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
...
...
app/src/main/java/uz/ssd/mobiuz/SplashActivity.kt
View file @
a9f50c61
package
uz.ssd.mobiuz
package
uz.ssd.mobiuz
import
android.content.Intent
import
android.content.Intent
import
android.graphics.Color
import
android.os.Bundle
import
android.os.Bundle
import
android.view.WindowManager
import
android.view.WindowManager
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.app.AppCompatActivity
...
@@ -24,7 +25,7 @@ class SplashActivity : AppCompatActivity() {
...
@@ -24,7 +25,7 @@ class SplashActivity : AppCompatActivity() {
_bn
=
ActivitySplashBinding
.
inflate
(
layoutInflater
)
_bn
=
ActivitySplashBinding
.
inflate
(
layoutInflater
)
setContentView
(
bn
.
root
)
setContentView
(
bn
.
root
)
window
.
navigationBarColor
=
this
.
resources
.
getColor
(
R
.
color
.
red_dark
)
lifecycleScope
.
launchWhenCreated
{
lifecycleScope
.
launchWhenCreated
{
delay
(
1000
)
delay
(
1000
)
if
(
pref
.
language
.
isEmpty
())
{
if
(
pref
.
language
.
isEmpty
())
{
...
...
app/src/main/java/uz/ssd/mobiuz/model/SharedPref.kt
View file @
a9f50c61
...
@@ -39,4 +39,10 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
...
@@ -39,4 +39,10 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
mySharedPref
.
edit
().
putString
(
::
language
.
name
,
value
).
apply
()
mySharedPref
.
edit
().
putString
(
::
language
.
name
,
value
).
apply
()
}
}
var
pin_code
:
String
get
()
=
mySharedPref
.
getString
(
::
pin_code
.
name
,
""
)
?:
""
set
(
value
)
{
mySharedPref
.
edit
().
putString
(
::
pin_code
.
name
,
value
).
apply
()
}
}
}
\ No newline at end of file
app/src/main/java/uz/ssd/mobiuz/ui/auth/ForgetPasswordFragment.kt
deleted
100644 → 0
View file @
346220d6
package
uz.ssd.mobiuz.ui.auth
import
android.os.Bundle
import
android.view.View
import
androidx.fragment.app.viewModels
import
androidx.navigation.NavController
import
androidx.navigation.fragment.NavHostFragment
import
dagger.hilt.android.AndroidEntryPoint
import
uz.ssd.mobiuz.R
import
uz.ssd.mobiuz.databinding.FragmentForgetPasswordBinding
import
uz.ssd.mobiuz.ui.base.BaseFragment
@AndroidEntryPoint
class
ForgetPasswordFragment
:
BaseFragment
(
R
.
layout
.
fragment_forget_password
)
{
private
var
_bn
:
FragmentForgetPasswordBinding
?
=
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
)
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
_bn
=
FragmentForgetPasswordBinding
.
bind
(
view
)
setUpUI
()
collects
()
}
override
fun
setUpUI
()
{
}
override
fun
collects
()
{
}
override
fun
onDestroy
()
{
_bn
=
null
super
.
onDestroy
()
}
}
\ No newline at end of file
app/src/main/java/uz/ssd/mobiuz/ui/auth/LoginFragment.kt
View file @
a9f50c61
...
@@ -71,7 +71,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
...
@@ -71,7 +71,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
is
UiStateObject
.
SUCCESS
->
{
is
UiStateObject
.
SUCCESS
->
{
showProgressDialog
(
false
)
showProgressDialog
(
false
)
if
(
phone
!=
"+9989
49125150
"
)
{
if
(
phone
!=
"+9989
99999999
"
)
{
navController
.
navigate
(
R
.
id
.
enterPasswordFragment
,
null
,
Utils
.
navOptions
())
navController
.
navigate
(
R
.
id
.
enterPasswordFragment
,
null
,
Utils
.
navOptions
())
}
else
{
}
else
{
navController
.
navigate
(
R
.
id
.
passwordFragment
,
bundleOf
(
CONSTANTS
.
PHONE
to
phoneRaw
),
Utils
.
navOptions
())
navController
.
navigate
(
R
.
id
.
passwordFragment
,
bundleOf
(
CONSTANTS
.
PHONE
to
phoneRaw
),
Utils
.
navOptions
())
...
...
app/src/main/java/uz/ssd/mobiuz/ui/auth/PasswordFragment.kt
View file @
a9f50c61
...
@@ -50,7 +50,7 @@ class PasswordFragment : BaseFragment(R.layout.fragment_password) {
...
@@ -50,7 +50,7 @@ class PasswordFragment : BaseFragment(R.layout.fragment_password) {
txtForgetPassword
.
setOnClickListener
(
object
:
ButtonClick
()
{
txtForgetPassword
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
override
fun
onSingleClick
(
v
:
View
?)
{
navController
.
navigate
(
R
.
id
.
forget
Password
Fragment
,
null
,
Utils
.
navOptions
())
navController
.
navigate
(
R
.
id
.
forget
Login
Fragment
,
null
,
Utils
.
navOptions
())
}
}
})
})
...
...
app/src/main/java/uz/ssd/mobiuz/ui/forget/ForgetLoginFragment.kt
0 → 100644
View file @
a9f50c61
package
uz.ssd.mobiuz.ui.forget
import
android.os.Bundle
import
android.view.View
import
androidx.core.os.bundleOf
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.FragmentLoginBinding
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.CONSTANTS
import
uz.ssd.mobiuz.utils.Utils
import
uz.ssd.mobiuz.utils.extensions.customLog
import
uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint
class
ForgetLoginFragment
:
BaseFragment
(
R
.
layout
.
fragment_login
)
{
private
var
_bn
:
FragmentLoginBinding
?
=
null
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
val
navController
:
NavController
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
NavHostFragment
.
findNavController
(
this
)
}
var
phone
=
""
var
phoneRaw
=
""
private
val
viewModel
:
AuthViewModel
by
viewModels
()
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
_bn
=
FragmentLoginBinding
.
bind
(
view
)
setUpUI
()
collects
()
}
override
fun
setUpUI
()
{
bn
.
apply
{
txtEnterPhone
.
text
=
"Забыли пароль?"
inputPhone
.
addTextChangedListener
(
object
:
TextWatcherWrapper
(){
override
fun
onTextChanged
(
s
:
CharSequence
?,
start
:
Int
,
before
:
Int
,
count
:
Int
)
{
super
.
onTextChanged
(
s
,
start
,
before
,
count
)
customLog
(
"s=${s?.toString()?.length}"
)
btnLogin
.
isEnabled
=
inputPhone
.
text
.
toString
().
trim
().
length
==
17
}
})
btnLogin
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
phone
=
"+998"
+
inputPhone
.
unmaskedText
.
toString
().
trim
()
phoneRaw
=
inputPhone
.
text
.
toString
().
trim
()
viewModel
.
login
(
UserAuth
(
phone
,
"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
.
forgetVerificationFragment
,
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
()
}
}
app/src/main/java/uz/ssd/mobiuz/ui/forget/ForgetPasswordFragment.kt
0 → 100644
View file @
a9f50c61
package
uz.ssd.mobiuz.ui.forget
import
uz.ssd.mobiuz.ui.auth.AuthViewModel
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.FragmentEnterPasswordBinding
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.Utils
import
uz.ssd.mobiuz.utils.extensions.showMessage
@AndroidEntryPoint
class
ForgetPasswordFragment
:
BaseFragment
(
R
.
layout
.
fragment_enter_password
)
{
private
var
_bn
:
FragmentEnterPasswordBinding
?
=
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
=
FragmentEnterPasswordBinding
.
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
<
5
)
}
})
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
=
"Пароли совпали"
txtCheckConfirm
.
setTextColor
(
requireActivity
().
resources
.
getColor
(
R
.
color
.
green
))
btnLogin
.
isEnabled
=
true
}
else
{
imageCheck
.
setImageResource
(
R
.
drawable
.
ic_vector_error
)
txtCheckConfirm
.
text
=
"Пароли не совпали"
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
,
"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
.
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
app/src/main/java/uz/ssd/mobiuz/ui/forget/ForgetVerificationFragment.kt
0 → 100644
View file @
a9f50c61
package
uz.ssd.mobiuz.ui.forget
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.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.ui.global.TextWatcherWrapper
import
uz.ssd.mobiuz.utils.ButtonClick
import
uz.ssd.mobiuz.utils.Utils
import
uz.ssd.mobiuz.utils.extensions.hideKeyboard
import
uz.ssd.mobiuz.utils.extensions.showKeyboard
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
)
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
_bn
=
FragmentVerificationBinding
.
bind
(
view
)
setUpUI
()
count
(
true
)
collects
()
}
override
fun
setUpUI
()
{
bn
.
apply
{
toolbar
.
setNavigationOnClickListener
{
navController
.
navigateUp
()
}
loadEdited
()
btnLogin
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
viewModel
.
login
(
UserAuth
(
"phone"
,
"password"
))
}
})
countWaitText
.
setTextColor
(
Color
.
parseColor
(
"#97ADB6"
))
sentCodeAgain
.
setTextColor
(
Color
.
parseColor
(
"#FF9500"
))
sentCodeAgain
.
setOnClickListener
{
// viewModel.login(UserAuth("",""))
count
(
true
)
}
coutdownView
.
setOnCountdownEndListener
{
count
(
false
)
}
}
}
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
)
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
(
120000
)
}
}
override
fun
onDestroy
()
{
_bn
=
null
super
.
onDestroy
()
}
}
app/src/main/java/uz/ssd/mobiuz/utils/extensions/SoftKeyboard.kt
0 → 100644
View file @
a9f50c61
package
uz.ssd.mobiuz.utils.extensions
import
android.content.Context
import
android.view.View
import
android.view.inputmethod.InputMethodManager
fun
View
.
hideKeyboard
():
Boolean
{
try
{
val
inputMethodManager
=
context
.
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
)
as
InputMethodManager
return
inputMethodManager
.
hideSoftInputFromWindow
(
windowToken
,
0
)
}
catch
(
ignored
:
RuntimeException
)
{
}
return
false
}
fun
View
.
showKeyboard
()
{
val
imm
=
context
.
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
)
as
InputMethodManager
this
.
requestFocus
()
imm
.
showSoftInput
(
this
,
0
)
}
\ No newline at end of file
app/src/main/res/drawable/bgn_lang.xml
View file @
a9f50c61
...
@@ -14,4 +14,7 @@
...
@@ -14,4 +14,7 @@
<corners
android:radius=
"@dimen/_6sdp"
/>
<corners
android:radius=
"@dimen/_6sdp"
/>
</shape>
</shape>
</item>
</item>
<item
android:drawable=
"@drawable/edit_text_checked"
android:state_focused=
"true"
/>
<item
android:drawable=
"@drawable/edit_text_unchecked"
android:state_focused=
"false"
/>
</selector>
</selector>
\ No newline at end of file
app/src/main/res/drawable/bgn_splash.png
0 → 100644
View file @
a9f50c61
175 KB
app/src/main/res/drawable/edit_text_bgn.xml
0 → 100644
View file @
a9f50c61
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:drawable=
"@drawable/edit_text_checked"
android:state_focused=
"true"
/>
<item
android:drawable=
"@drawable/edit_text_unchecked"
android:state_focused=
"false"
/>
</selector>
\ No newline at end of file
app/src/main/res/drawable/edit_text_checked.xml
0 → 100644
View file @
a9f50c61
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<stroke
android:width=
"1.5dp"
android:color=
"@color/red"
/>
<corners
android:radius=
"6dp"
/>
<solid
android:color=
"#FFFFFF"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/edit_text_unchecked.xml
0 → 100644
View file @
a9f50c61
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<corners
android:radius=
"6dp"
/>
<solid
android:color=
"@color/lang_bgn"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/gradient.png
0 → 100644
View file @
a9f50c61
41.3 KB
app/src/main/res/layout/activity_language.xml
View file @
a9f50c61
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
...
@@ -12,77 +11,87 @@
...
@@ -12,77 +11,87 @@
android:scaleType=
"fitXY"
android:scaleType=
"fitXY"
android:src=
"@drawable/background"
android:src=
"@drawable/background"
android:layout_marginTop=
"@dimen/_40sdp"
android:layout_marginTop=
"@dimen/_40sdp"
android:layout_height=
"@dimen/_280sdp"
/>
android:layout_weight=
"1"
android:layout_height=
"0dp"
/>
<TextView
android:layout_width=
"wrap_content"
android:text=
"@string/choose_lang"
android:layout_gravity=
"start"
android:textColor=
"@color/black"
android:textStyle=
"bold"
android:textSize=
"16sp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginBottom=
"@dimen/_12sdp"
android:layout_height=
"wrap_content"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:gravity=
"center"
android:id=
"@+id/uzbek_lang"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:paddingVertical=
"@dimen/_12sdp"
android:background=
"@drawable/bgn_lang"
android:layout_height=
"wrap_content"
>
<ImageView
android:layout_width=
"wrap_content"
android:src=
"@drawable/ic_uzbekistan"
android:layout_height=
"wrap_content"
/>
<TextView
android:layout_width=
"wrap_content"
android:text=
"@string/uzbek"
android:textSize=
"14dp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:gravity=
"center"
android:layout_height=
"0dp"
android:id=
"@+id/russian_lang"
android:orientation=
"vertical"
android:layout_marginVertical=
"@dimen/_12sdp"
android:layout_weight=
"1.2"
>
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:paddingVertical=
"@dimen/_12sdp"
android:background=
"@drawable/bgn_lang"
android:layout_height=
"wrap_content"
>
<ImageView
android:layout_width=
"wrap_content"
android:src=
"@drawable/ic_russia"
android:layout_height=
"wrap_content"
/>
<TextView
android:layout_width=
"wrap_content"
android:text=
"@string/russian"
android:textSize=
"14dp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:gravity=
"center"
android:id=
"@+id/english_lang"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:paddingVertical=
"@dimen/_12sdp"
android:background=
"@drawable/bgn_lang"
android:layout_height=
"wrap_content"
>
<ImageView
android:layout_width=
"wrap_content"
android:src=
"@drawable/ic_united_kingdom"
android:layout_height=
"wrap_content"
/>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:text=
"@string/english"
android:text=
"@string/choose_lang"
android:textSize=
"14dp"
android:layout_gravity=
"start"
android:textColor=
"@color/black"
android:textStyle=
"bold"
android:textSize=
"16sp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginBottom=
"@dimen/_12sdp"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:gravity=
"center"
android:id=
"@+id/uzbek_lang"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:paddingVertical=
"@dimen/_12sdp"
android:background=
"@drawable/bgn_lang"
android:layout_height=
"wrap_content"
>
<ImageView
android:layout_width=
"wrap_content"
android:src=
"@drawable/ic_uzbekistan"
android:layout_height=
"wrap_content"
/>
<TextView
android:layout_width=
"wrap_content"
android:text=
"@string/uzbek"
android:textSize=
"14dp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:gravity=
"center"
android:id=
"@+id/russian_lang"
android:layout_marginVertical=
"@dimen/_12sdp"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:paddingVertical=
"@dimen/_12sdp"
android:background=
"@drawable/bgn_lang"
android:layout_height=
"wrap_content"
>
<ImageView
android:layout_width=
"wrap_content"
android:src=
"@drawable/ic_russia"
android:layout_height=
"wrap_content"
/>
<TextView
android:layout_width=
"wrap_content"
android:text=
"@string/russian"
android:textSize=
"14dp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:gravity=
"center"
android:id=
"@+id/english_lang"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:paddingVertical=
"@dimen/_12sdp"
android:background=
"@drawable/bgn_lang"
android:layout_height=
"wrap_content"
>
<ImageView
android:layout_width=
"wrap_content"
android:src=
"@drawable/ic_united_kingdom"
android:layout_height=
"wrap_content"
/>
<TextView
android:layout_width=
"wrap_content"
android:text=
"@string/english"
android:textSize=
"14dp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/activity_splash.xml
View file @
a9f50c61
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:background=
"@
color/red_dark
"
android:background=
"@
drawable/bgn_splash
"
android:gravity=
"center"
android:gravity=
"center"
android:fitsSystemWindows=
"false"
android:fitsSystemWindows=
"false"
tools:context=
".SplashActivity"
>
tools:context=
".SplashActivity"
>
...
...
app/src/main/res/layout/fragment_biometric.xml
View file @
a9f50c61
...
@@ -4,43 +4,47 @@
...
@@ -4,43 +4,47 @@
xmlns:tools=
"http://schemas.android.com/tools"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@drawable/gradient"
android:orientation=
"vertical"
android:orientation=
"vertical"
tools:context=
".ui.auth.BiometricFragment"
>
tools:context=
".ui.auth.BiometricFragment"
>
<FrameLayout
<FrameLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:paddingHorizontal=
"@dimen/_12sdp"
android:layout_height=
"?actionBarSize"
android:layout_height=
"?actionBarSize"
>
android:paddingHorizontal=
"@dimen/_12sdp"
>
<ImageView
<ImageView
android:id=
"@+id/btn_back"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center|start"
android:layout_gravity=
"center|start"
android:padding=
"@dimen/_4sdp"
android:id=
"@+id/btn_back"
android:background=
"?selectableItemBackgroundBorderless"
android:background=
"?selectableItemBackgroundBorderless"
android:src=
"@drawable/ic_baseline_arrow_back"
/>
android:padding=
"@dimen/_4sdp"
android:src=
"@drawable/ic_baseline_arrow_back"
/>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:text=
"Пропустить"
android:id=
"@+id/txt_skip"
android:id=
"@+id/txt_skip"
android:padding=
"@dimen/_4sdp"
android:layout_width=
"wrap_content"
android:textStyle=
"bold"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center|end"
android:background=
"?android:selectableItemBackground"
android:background=
"?android:selectableItemBackground"
android:padding=
"@dimen/_4sdp"
android:text=
"Пропустить"
android:textColor=
"@color/red_dark"
android:textColor=
"@color/red_dark"
android:
layout_gravity=
"center|end
"
android:
textSize=
"16sp
"
android:
layout_height=
"wrap_content"
/>
android:
textStyle=
"bold"
/>
</FrameLayout>
</FrameLayout>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_marginTop=
"@dimen/_12sdp"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/_12sdp"
android:gravity=
"center"
>
android:gravity=
"center"
>
<ImageView
<ImageView
android:layout_width=
"
wrap_content
"
android:layout_width=
"
@dimen/_100sdp
"
android:layout_height=
"
wrap_content
"
android:layout_height=
"
@dimen/_100sdp
"
android:src=
"@drawable/ic_fingerprint"
/>
android:src=
"@drawable/ic_fingerprint"
/>
</LinearLayout>
</LinearLayout>
...
@@ -48,8 +52,8 @@
...
@@ -48,8 +52,8 @@
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"
android:layout_marginTop=
"@dimen/_12sdp"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:layout_marginTop=
"@dimen/_12sdp"
android:text=
"Биометрический вход"
android:text=
"Биометрический вход"
android:textSize=
"@dimen/_20sdp"
android:textSize=
"@dimen/_20sdp"
android:textStyle=
"bold"
/>
android:textStyle=
"bold"
/>
...
@@ -58,31 +62,32 @@
...
@@ -58,31 +62,32 @@
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"
android:gravity=
"center"
android:layout_marginTop=
"@dimen/_12sdp"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:layout_marginTop=
"@dimen/_12sdp"
android:text=
"Быстро войти в систему с помощью отпечатка пальца
android:text=
"Быстро войти в систему с помощью отпечатка пальца
или Face ID."
или Face ID."
android:textColor=
"@color/text_color_77"
android:textColor=
"@color/text_color_77"
android:textSize=
"@dimen/_14sdp"
/>
android:textSize=
"@dimen/_14sdp"
/>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:paddingHorizontal=
"@dimen/_12sdp"
android:layout_height=
"0dp"
android:layout_height=
"0dp"
android:layout_weight=
"1"
android:gravity=
"center"
android:gravity=
"center"
android:layout_weight=
"1"
>
android:paddingHorizontal=
"@dimen/_12sdp"
>
<TextView
<TextView
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:textSize=
"17sp"
android:text=
"Активировать"
android:text=
"Активировать"
android:textStyle=
"bold"
android:textStyle=
"bold"
/>
android:layout_height=
"wrap_content"
/>
<Switch
<Switch
android:layout_width=
"wrap_content"
android:id=
"@+id/btn_switch"
android:id=
"@+id/btn_switch"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
tools:ignore=
"UseSwitchCompatOrMaterialXml"
/>
tools:ignore=
"UseSwitchCompatOrMaterialXml"
/>
</LinearLayout>
</LinearLayout>
...
@@ -91,31 +96,36 @@
...
@@ -91,31 +96,36 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_height=
"0dp"
android:layout_weight=
"1"
>
android:layout_weight=
"1"
>
<TextView
<TextView
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"
android:textSize=
"15sp"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:layout_marginHorizontal=
"@dimen/_12sdp"
android:text=
"Измените это в любое время в настройках"
android:text=
"Измените это в любое время в настройках"
android:textColor=
"@color/text_color_77"
/>
android:textSize=
"@dimen/_14sdp"
/>
</LinearLayout>
</LinearLayout>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_height=
"0dp"
android:gravity=
"end|bottom"
android:layout_weight=
"0.7"
android:layout_weight=
"1"
>
android:gravity=
"end|bottom"
>
<com.google.android.material.button.MaterialButton
<com.google.android.material.button.MaterialButton
android:id=
"@+id/btn_next"
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:id=
"@+id/btn_next"
android:layout_marginEnd=
"@dimen/_12sdp"
android:layout_marginEnd=
"@dimen/_12sdp"
android:textAllCaps=
"false"
android:paddingHorizontal=
"@dimen/_18sdp"
android:padding=
"@dimen/_10sdp"
android:paddingVertical=
"@dimen/_10sdp"
android:textStyle=
"bold"
android:textSize=
"16sp"
android:text=
"@string/continuoue_task"
android:text=
"@string/continuoue_task"
android:textAllCaps=
"false"
android:textColor=
"@color/red"
android:textColor=
"@color/red"
app:backgroundTint=
"@color/white"
/>
app:backgroundTint=
"@color/white"
/>
</LinearLayout>
</LinearLayout>
...
...
app/src/main/res/layout/fragment_enter_password.xml
View file @
a9f50c61
...
@@ -21,7 +21,7 @@
...
@@ -21,7 +21,7 @@
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginTop=
"@dimen/_14sdp"
android:layout_marginTop=
"@dimen/_14sdp"
android:text=
"@string/think_password"
android:text=
"@string/think_password"
android:textSize=
"@dimen/_1
6
sdp"
android:textSize=
"@dimen/_1
8
sdp"
android:textStyle=
"bold"
android:textStyle=
"bold"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintBottom_toTopOf=
"@id/txt_hint_password"
app:layout_constraintBottom_toTopOf=
"@id/txt_hint_password"
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginTop=
"@dimen/_1
4
sdp"
android:layout_marginTop=
"@dimen/_1
6
sdp"
android:layout_marginBottom=
"@dimen/_4sdp"
android:layout_marginBottom=
"@dimen/_4sdp"
android:text=
"Введите пароль:"
android:text=
"Введите пароль:"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
...
@@ -56,7 +56,7 @@
...
@@ -56,7 +56,7 @@
android:id=
"@+id/input_password"
android:id=
"@+id/input_password"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@drawable/
bgn_lang
"
android:background=
"@drawable/
edit_text_bgn
"
android:imeOptions=
"actionNext"
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/_12sdp"
android:textSize=
"@dimen/_12sdp"
android:inputType=
"textPassword"
android:inputType=
"textPassword"
...
@@ -101,7 +101,7 @@
...
@@ -101,7 +101,7 @@
android:id=
"@+id/input_confirm"
android:id=
"@+id/input_confirm"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@drawable/
bgn_lang
"
android:background=
"@drawable/
edit_text_bgn
"
android:imeOptions=
"actionDone"
android:imeOptions=
"actionDone"
android:textSize=
"@dimen/_12sdp"
android:textSize=
"@dimen/_12sdp"
android:inputType=
"textPassword"
android:inputType=
"textPassword"
...
...
app/src/main/res/layout/fragment_forget_password.xml
View file @
a9f50c61
...
@@ -55,7 +55,7 @@
...
@@ -55,7 +55,7 @@
app:notMaskedSymbol=
"*"
app:notMaskedSymbol=
"*"
android:textSize=
"@dimen/_12sdp"
android:textSize=
"@dimen/_12sdp"
android:padding=
"@dimen/_14sdp"
android:padding=
"@dimen/_14sdp"
android:background=
"@drawable/
bgn_lang
"
android:background=
"@drawable/
edit_text_bgn
"
android:layout_height=
"match_parent"
/>
android:layout_height=
"match_parent"
/>
</com.google.android.material.textfield.TextInputLayout>
</com.google.android.material.textfield.TextInputLayout>
...
...
app/src/main/res/layout/fragment_login.xml
View file @
a9f50c61
...
@@ -21,7 +21,7 @@
...
@@ -21,7 +21,7 @@
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_number"
android:textSize=
"@dimen/_1
6
sdp"
android:textSize=
"@dimen/_1
8
sdp"
android:textStyle=
"bold"
/>
android:textStyle=
"bold"
/>
<LinearLayout
<LinearLayout
...
@@ -58,7 +58,7 @@
...
@@ -58,7 +58,7 @@
app:notMaskedSymbol=
"*"
app:notMaskedSymbol=
"*"
android:textSize=
"@dimen/_12sdp"
android:textSize=
"@dimen/_12sdp"
android:padding=
"@dimen/_14sdp"
android:padding=
"@dimen/_14sdp"
android:background=
"@drawable/
bgn_lang
"
android:background=
"@drawable/
edit_text_bgn
"
android:layout_height=
"match_parent"
/>
android:layout_height=
"match_parent"
/>
</com.google.android.material.textfield.TextInputLayout>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</LinearLayout>
...
@@ -66,7 +66,7 @@
...
@@ -66,7 +66,7 @@
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_height=
"0dp"
android:layout_weight=
"1"
>
android:layout_weight=
"1
.5
"
>
<Button
<Button
android:id=
"@+id/btn_login"
android:id=
"@+id/btn_login"
...
...
app/src/main/res/layout/fragment_password.xml
View file @
a9f50c61
...
@@ -21,7 +21,7 @@
...
@@ -21,7 +21,7 @@
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginStart=
"@dimen/_12sdp"
android:layout_marginTop=
"@dimen/_14sdp"
android:layout_marginTop=
"@dimen/_14sdp"
android:text=
"@string/enter"
android:text=
"@string/enter"
android:textSize=
"@dimen/_1
6
sdp"
android:textSize=
"@dimen/_1
8
sdp"
android:textStyle=
"bold"
android:textStyle=
"bold"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintBottom_toTopOf=
"@id/txt_hint_password"
app:layout_constraintBottom_toTopOf=
"@id/txt_hint_password"
...
@@ -59,7 +59,7 @@
...
@@ -59,7 +59,7 @@
android:clickable=
"false"
android:clickable=
"false"
android:focusable=
"false"
android:focusable=
"false"
android:textSize=
"@dimen/_12sdp"
android:textSize=
"@dimen/_12sdp"
android:background=
"@drawable/
bgn_lang
"
android:background=
"@drawable/
edit_text_bgn
"
android:imeOptions=
"actionNext"
android:imeOptions=
"actionNext"
android:inputType=
"phone"
android:inputType=
"phone"
android:paddingVertical=
"@dimen/_12sdp"
android:paddingVertical=
"@dimen/_12sdp"
...
@@ -104,7 +104,7 @@
...
@@ -104,7 +104,7 @@
android:id=
"@+id/input_password"
android:id=
"@+id/input_password"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@drawable/
bgn_lang
"
android:background=
"@drawable/
edit_text_bgn
"
android:imeOptions=
"actionDone"
android:imeOptions=
"actionDone"
android:inputType=
"textPassword"
android:inputType=
"textPassword"
android:textSize=
"@dimen/_12sdp"
android:textSize=
"@dimen/_12sdp"
...
...
app/src/main/res/navigation/nav_graph_auth.xml
View file @
a9f50c61
...
@@ -29,6 +29,26 @@
...
@@ -29,6 +29,26 @@
<fragment
<fragment
android:id=
"@+id/forgetPasswordFragment"
android:id=
"@+id/forgetPasswordFragment"
tools:layout=
"@layout/fragment_forget_password"
tools:layout=
"@layout/fragment_forget_password"
android:name=
"uz.ssd.mobiuz.ui.
auth
.ForgetPasswordFragment"
android:name=
"uz.ssd.mobiuz.ui.
forget
.ForgetPasswordFragment"
android:label=
"ForgetPasswordFragment"
/>
android:label=
"ForgetPasswordFragment"
/>
<fragment
android:id=
"@+id/pinFragment"
tools:layout=
"@layout/fragment_pin"
android:name=
"uz.ssd.mobiuz.ui.auth.PinFragment"
android:label=
"PinFragment"
/>
<fragment
android:id=
"@+id/biometricFragment"
android:name=
"uz.ssd.mobiuz.ui.auth.BiometricFragment"
android:label=
"fragment_biometric"
tools:layout=
"@layout/fragment_biometric"
/>
<fragment
android:id=
"@+id/forgetLoginFragment"
tools:layout=
"@layout/fragment_login"
android:name=
"uz.ssd.mobiuz.ui.forget.ForgetLoginFragment"
android:label=
"ForgetLoginFragment"
/>
<fragment
android:id=
"@+id/forgetVerificationFragment"
tools:layout=
"@layout/fragment_pin"
android:name=
"uz.ssd.mobiuz.ui.forget.ForgetVerificationFragment"
android:label=
"ForgetPinFragment"
/>
</navigation>
</navigation>
\ No newline at end of file
app/src/main/res/values/colors.xml
View file @
a9f50c61
...
@@ -15,5 +15,6 @@
...
@@ -15,5 +15,6 @@
<color
name=
"lang_bgn_dark"
>
#B6B4B4
</color>
<color
name=
"lang_bgn_dark"
>
#B6B4B4
</color>
<color
name=
"light"
>
#B6B6B6
</color>
<color
name=
"light"
>
#B6B6B6
</color>
<color
name=
"light_dark"
>
#1C1C1E
</color>
<color
name=
"light_dark"
>
#1C1C1E
</color>
<color
name=
"text_color_77"
>
#777777
</color>
<color
name=
"black_80"
>
#CC000000
</color>
<color
name=
"black_80"
>
#CC000000
</color>
</resources>
</resources>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
a9f50c61
...
@@ -38,7 +38,9 @@
...
@@ -38,7 +38,9 @@
<string
name=
"continuoue_task"
>
Далее
</string>
<string
name=
"continuoue_task"
>
Далее
</string>
<string
name=
"think_password"
>
Придумайте пароль
</string>
<string
name=
"think_password"
>
Придумайте пароль
</string>
<string
name=
"enter"
>
Войти
</string>
<string
name=
"enter"
>
Войти
</string>
<string
name=
"enter_verification"
>
Ведите код подтверждения
</string>
<string
name=
"enter_verification"
>
Ведите код
\n
подтверждения
</string>
<string
name=
"sent_code_again"
>
Sent code again
</string>
<string
name=
"sent_code_again"
>
Sent code again
</string>
<string
name=
"install_pin"
>
Установите PIN-код
</string>
<string
name=
"confirm_pin"
>
Повторите этот PIN-код
</string>
</resources>
</resources>
\ No newline at end of file
app/src/main/res/values/themes.xml
View file @
a9f50c61
...
@@ -7,16 +7,15 @@
...
@@ -7,16 +7,15 @@
<item
name=
"colorOnPrimary"
>
@color/white
</item>
<item
name=
"colorOnPrimary"
>
@color/white
</item>
<!-- <item name="windowActionBar">false</item>-->
<!-- <item name="windowActionBar">false</item>-->
<!-- <item name="windowNoTitle">false</item>-->
<!-- <item name="windowNoTitle">false</item>-->
<item
name=
"android:fitsSystemWindows"
>
false
</item>
<item
name=
"android:fitsSystemWindows"
>
false
</item>
<item
name=
"colorPrimaryDark"
>
@android:color/transparent
</item>
<item
name=
"colorPrimaryDark"
>
@android:color/transparent
</item>
<!-- <item name="android:windowDrawsSystemBarBackgrounds">true</item>-->
<!-- <item name="android:windowDrawsSystemBarBackgrounds">true</item>-->
<item
name=
"android:statusBarColor"
>
@android:color/transparent
</item>
<item
name=
"android:statusBarColor"
>
@android:color/transparent
</item>
<item
name=
"android:windowTranslucentStatus"
>
true
</item>
<item
name=
"android:windowTranslucentStatus"
>
true
</item>
<!-- Secondary brand color. -->
<!-- Secondary brand color. -->
<item
name=
"colorSecondary"
>
@color/teal_200
</item>
<item
name=
"colorSecondary"
>
@color/teal_200
</item>
<item
name=
"colorSecondaryVariant"
>
@color/teal_700
</item>
<item
name=
"colorSecondaryVariant"
>
@color/teal_700
</item>
...
@@ -48,7 +47,7 @@
...
@@ -48,7 +47,7 @@
</style>
</style>
<style
name
=
"DialogThemeLight"
parent=
"Theme.AppCompat.Light.Dialog.MinWidth"
>
<style
name=
"DialogThemeLight"
parent=
"Theme.AppCompat.Light.Dialog.MinWidth"
>
<item
name=
"colorAccent"
>
@color/chuck_colorAccent
</item>
<item
name=
"colorAccent"
>
@color/chuck_colorAccent
</item>
<item
name=
"android:colorAccent"
>
@color/chuck_colorAccent
</item>
<item
name=
"android:colorAccent"
>
@color/chuck_colorAccent
</item>
<item
name=
"android:background"
>
@color/chuck_colorPrimary
</item>
<item
name=
"android:background"
>
@color/chuck_colorPrimary
</item>
...
@@ -56,4 +55,37 @@
...
@@ -56,4 +55,37 @@
<item
name=
"android:textColorSecondary"
>
@color/chuck_colorPrimary
</item>
<item
name=
"android:textColorSecondary"
>
@color/chuck_colorPrimary
</item>
</style>
</style>
<style
name=
"BtnStyle"
>
<item
name=
"android:layout_height"
>
wrap_content
</item>
<item
name=
"android:layout_width"
>
wrap_content
</item>
<item
name=
"background"
>
@drawable/bgn_pin_btn
</item>
<item
name=
"android:paddingTop"
>
@dimen/_16sdp
</item>
<item
name=
"android:paddingBottom"
>
@dimen/_16sdp
</item>
<item
name=
"android:paddingStart"
>
@dimen/_20sdp
</item>
<item
name=
"android:paddingEnd"
>
@dimen/_20sdp
</item>
<item
name=
"android:clickable"
>
true
</item>
<item
name=
"android:focusable"
>
true
</item>
<item
name=
"android:gravity"
>
center
</item>
<item
name=
"android:textStyle"
>
bold
</item>
<item
name=
"android:textSize"
>
18sp
</item>
</style>
<style
name=
"PinStyle"
>
<item
name=
"android:layout_height"
>
@dimen/_32sdp
</item>
<item
name=
"android:layout_width"
>
@dimen/_32sdp
</item>
<item
name=
"background"
>
@drawable/bgn_ver_unchecked
</item>
<item
name=
"android:clickable"
>
true
</item>
<item
name=
"android:focusable"
>
true
</item>
<item
name=
"android:hint"
>
*
</item>
<item
name=
"android:inputType"
>
number
</item>
<item
name=
"android:imeOptions"
>
actionNext
</item>
<item
name=
"android:layout_marginStart"
>
@dimen/_4sdp
</item>
<item
name=
"android:layout_marginEnd"
>
@dimen/_4sdp
</item>
<item
name=
"android:textColorHint"
>
@color/black
</item>
<item
name=
"android:gravity"
>
center
</item>
<item
name=
"android:textStyle"
>
bold
</item>
<item
name=
"android:textSize"
>
18sp
</item>
<item
name=
"android:maxLength"
>
1
</item>
</style>
</resources>
</resources>
\ No newline at end of file
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