Commit a9f50c61 authored by shohboz's avatar shohboz

[ADD] MUS-136 Feature, add forget password screens

parent 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
......@@ -4,9 +4,16 @@
<option name="filePathToZoomLevelMap">
<map>
<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_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/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_baseline_account_box.xml" value="0.2796296296296296" />
<entry key="app/src/main/res/drawable/ic_baseline_arrow_back.xml" value="0.2759259259259259" />
......@@ -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_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_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_russia.xml" value="0.2796296296296296" />
<entry key="app/src/main/res/drawable/ic_vector_error.xml" value="0.20694444444444443" />
......@@ -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_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/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_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_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_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_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/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_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" />
</map>
</option>
......
package uz.ssd.mobiuz
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import dagger.hilt.android.AndroidEntryPoint
import uz.ssd.mobiuz.databinding.ActivityLanguageBinding
......
package uz.ssd.mobiuz
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
......@@ -24,7 +25,7 @@ class SplashActivity : AppCompatActivity() {
_bn = ActivitySplashBinding.inflate(layoutInflater)
setContentView(bn.root)
window.navigationBarColor = this.resources.getColor(R.color.red_dark)
lifecycleScope.launchWhenCreated {
delay(1000)
if (pref.language.isEmpty()) {
......
......@@ -39,4 +39,10 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
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
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
......@@ -71,7 +71,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
if (phone != "+998949125150") {
if (phone != "+998999999999") {
navController.navigate(R.id.enterPasswordFragment, null, Utils.navOptions())
} else {
navController.navigate(R.id.passwordFragment, bundleOf(CONSTANTS.PHONE to phoneRaw), Utils.navOptions())
......
......@@ -50,7 +50,7 @@ class PasswordFragment : BaseFragment(R.layout.fragment_password) {
txtForgetPassword.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navController.navigate(R.id.forgetPasswordFragment,null,Utils.navOptions())
navController.navigate(R.id.forgetLoginFragment,null,Utils.navOptions())
}
})
......
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()
}
}
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
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()
}
}
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
......@@ -14,4 +14,7 @@
<corners android:radius="@dimen/_6sdp"/>
</shape>
</item>
<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
<?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
<?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
<?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
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
......@@ -12,77 +11,87 @@
android:scaleType="fitXY"
android:src="@drawable/background"
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
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"/>
android:layout_height="0dp"
android:orientation="vertical"
android:layout_weight="1.2">
<TextView
android:layout_width="wrap_content"
android:text="@string/english"
android:textSize="14dp"
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
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>
\ No newline at end of file
......@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@color/red_dark"
android:background="@drawable/bgn_splash"
android:gravity="center"
android:fitsSystemWindows="false"
tools:context=".SplashActivity">
......
......@@ -4,43 +4,47 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient"
android:orientation="vertical"
tools:context=".ui.auth.BiometricFragment">
<FrameLayout
android:layout_width="match_parent"
android:paddingHorizontal="@dimen/_12sdp"
android:layout_height="?actionBarSize">
android:layout_height="?actionBarSize"
android:paddingHorizontal="@dimen/_12sdp">
<ImageView
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|start"
android:padding="@dimen/_4sdp"
android:id="@+id/btn_back"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_baseline_arrow_back"/>
android:padding="@dimen/_4sdp"
android:src="@drawable/ic_baseline_arrow_back" />
<TextView
android:layout_width="wrap_content"
android:text="Пропустить"
android:id="@+id/txt_skip"
android:padding="@dimen/_4sdp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|end"
android:background="?android:selectableItemBackground"
android:padding="@dimen/_4sdp"
android:text="Пропустить"
android:textColor="@color/red_dark"
android:layout_gravity="center|end"
android:layout_height="wrap_content"/>
android:textSize="16sp"
android:textStyle="bold" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_marginTop="@dimen/_12sdp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_12sdp"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="@dimen/_100sdp"
android:layout_height="@dimen/_100sdp"
android:src="@drawable/ic_fingerprint" />
</LinearLayout>
......@@ -48,8 +52,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/_12sdp"
android:layout_marginHorizontal="@dimen/_12sdp"
android:layout_marginTop="@dimen/_12sdp"
android:text="Биометрический вход"
android:textSize="@dimen/_20sdp"
android:textStyle="bold" />
......@@ -58,31 +62,32 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginTop="@dimen/_12sdp"
android:layout_marginHorizontal="@dimen/_12sdp"
android:layout_marginTop="@dimen/_12sdp"
android:text="Быстро войти в систему с помощью отпечатка пальца
или Face ID."
android:textColor="@color/text_color_77"
android:textSize="@dimen/_14sdp" />
<LinearLayout
android:layout_width="match_parent"
android:paddingHorizontal="@dimen/_12sdp"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_weight="1">
android:paddingHorizontal="@dimen/_12sdp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="17sp"
android:text="Активировать"
android:textStyle="bold"
android:layout_height="wrap_content"/>
android:textStyle="bold" />
<Switch
android:layout_width="wrap_content"
android:id="@+id/btn_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="UseSwitchCompatOrMaterialXml" />
</LinearLayout>
......@@ -91,31 +96,36 @@
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="15sp"
android:layout_marginHorizontal="@dimen/_12sdp"
android:text="Измените это в любое время в настройках"
android:textColor="@color/text_color_77"
android:textSize="@dimen/_14sdp" />
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="end|bottom"
android:layout_weight="1">
android:layout_weight="0.7"
android:gravity="end|bottom">
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:id="@+id/btn_next"
android:layout_marginEnd="@dimen/_12sdp"
android:textAllCaps="false"
android:padding="@dimen/_10sdp"
android:paddingHorizontal="@dimen/_18sdp"
android:paddingVertical="@dimen/_10sdp"
android:textStyle="bold"
android:textSize="16sp"
android:text="@string/continuoue_task"
android:textAllCaps="false"
android:textColor="@color/red"
app:backgroundTint="@color/white" />
</LinearLayout>
......
......@@ -21,7 +21,7 @@
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/think_password"
android:textSize="@dimen/_16sdp"
android:textSize="@dimen/_18sdp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/txt_hint_password"
......@@ -32,7 +32,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:layout_marginTop="@dimen/_16sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:text="Введите пароль:"
android:textColor="@color/black"
......@@ -56,7 +56,7 @@
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bgn_lang"
android:background="@drawable/edit_text_bgn"
android:imeOptions="actionNext"
android:textSize="@dimen/_12sdp"
android:inputType="textPassword"
......@@ -101,7 +101,7 @@
android:id="@+id/input_confirm"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bgn_lang"
android:background="@drawable/edit_text_bgn"
android:imeOptions="actionDone"
android:textSize="@dimen/_12sdp"
android:inputType="textPassword"
......
......@@ -55,7 +55,7 @@
app:notMaskedSymbol="*"
android:textSize="@dimen/_12sdp"
android:padding="@dimen/_14sdp"
android:background="@drawable/bgn_lang"
android:background="@drawable/edit_text_bgn"
android:layout_height="match_parent"/>
</com.google.android.material.textfield.TextInputLayout>
......
......@@ -21,7 +21,7 @@
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_number"
android:textSize="@dimen/_16sdp"
android:textSize="@dimen/_18sdp"
android:textStyle="bold" />
<LinearLayout
......@@ -58,7 +58,7 @@
app:notMaskedSymbol="*"
android:textSize="@dimen/_12sdp"
android:padding="@dimen/_14sdp"
android:background="@drawable/bgn_lang"
android:background="@drawable/edit_text_bgn"
android:layout_height="match_parent"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
......@@ -66,7 +66,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
android:layout_weight="1.5">
<Button
android:id="@+id/btn_login"
......
......@@ -21,7 +21,7 @@
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter"
android:textSize="@dimen/_16sdp"
android:textSize="@dimen/_18sdp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/txt_hint_password"
......@@ -59,7 +59,7 @@
android:clickable="false"
android:focusable="false"
android:textSize="@dimen/_12sdp"
android:background="@drawable/bgn_lang"
android:background="@drawable/edit_text_bgn"
android:imeOptions="actionNext"
android:inputType="phone"
android:paddingVertical="@dimen/_12sdp"
......@@ -104,7 +104,7 @@
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bgn_lang"
android:background="@drawable/edit_text_bgn"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:textSize="@dimen/_12sdp"
......
......@@ -29,6 +29,26 @@
<fragment
android:id="@+id/forgetPasswordFragment"
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" />
<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>
\ No newline at end of file
......@@ -15,5 +15,6 @@
<color name="lang_bgn_dark">#B6B4B4</color>
<color name="light">#B6B6B6</color>
<color name="light_dark">#1C1C1E</color>
<color name="text_color_77">#777777</color>
<color name="black_80">#CC000000</color>
</resources>
\ No newline at end of file
......@@ -38,7 +38,9 @@
<string name="continuoue_task">Далее</string>
<string name="think_password">Придумайте пароль</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="install_pin">Установите PIN-код</string>
<string name="confirm_pin">Повторите этот PIN-код</string>
</resources>
\ No newline at end of file
......@@ -7,16 +7,15 @@
<item name="colorOnPrimary">@color/white</item>
<!-- <item name="windowActionBar">false</item>-->
<!-- <item name="windowNoTitle">false</item>-->
<!-- <item name="windowActionBar">false</item>-->
<!-- <item name="windowNoTitle">false</item>-->
<item name="android:fitsSystemWindows">false</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:windowTranslucentStatus">true</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
......@@ -48,7 +47,7 @@
</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="android:colorAccent">@color/chuck_colorAccent</item>
<item name="android:background">@color/chuck_colorPrimary</item>
......@@ -56,4 +55,37 @@
<item name="android:textColorSecondary">@color/chuck_colorPrimary</item>
</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>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment