Commit b0fbe4c3 authored by shohboz's avatar shohboz

[UPD] MUS-195 Feature, updated safety screens change pin, password and others

parent a90983ff
<?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-12-06T08:51:27.847367Z" />
</component>
</project>
\ No newline at end of file
package com.mobiuz.app.dev.network.api package com.mobiuz.app.dev.network.api
import com.mobiuz.app.dev.model.ServiceData
import com.mobiuz.app.dev.model.UserAuth import com.mobiuz.app.dev.model.UserAuth
import com.mobiuz.app.dev.network.model.* import com.mobiuz.app.dev.network.model.*
import retrofit2.http.Body import retrofit2.http.Body
...@@ -45,4 +46,27 @@ interface ApiService { ...@@ -45,4 +46,27 @@ interface ApiService {
suspend fun resetPassword( suspend fun resetPassword(
@Body req: UserAuth @Body req: UserAuth
): ResponseObject<GenerateToken> ): ResponseObject<GenerateToken>
@POST("customer/log-out")
suspend fun logOut(): ResponseList<Any>
@POST("customer/send-sms-code")
suspend fun reSendSms(
@Body req: UserAuth
): ResponseObject<Any>
@POST("customer/check-password")
suspend fun checkPassword(
@Body req: UserAuth
): ResponseObject<Any>
@POST("customer/change-password")
suspend fun installPassword(
@Body req: ChangePassword
): ResponseObject<Any>
@POST("service/index")
suspend fun getServices(): ResponseList<ServiceData>
} }
\ No newline at end of file
package com.mobiuz.app.dev.network.model
data class ChangePassword(
val old_password:String,
val password:String
)
...@@ -21,6 +21,7 @@ import com.mobiuz.app.dev.ui.global.TextWatcherWrapper ...@@ -21,6 +21,7 @@ import com.mobiuz.app.dev.ui.global.TextWatcherWrapper
import com.mobiuz.app.dev.utils.Utils import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.customLog import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.showCustomDialog import com.mobiuz.app.dev.utils.extensions.showCustomDialog
import com.mobiuz.app.dev.utils.hideKeyboard
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
...@@ -46,6 +47,12 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) { ...@@ -46,6 +47,12 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
viewGroup.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
}
})
inputPhone.addTextChangedListener(object : TextWatcherWrapper() { inputPhone.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count) super.onTextChanged(s, start, before, count)
......
...@@ -64,7 +64,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) { ...@@ -64,7 +64,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
delay(50) delay(50)
if (pinCode == it) { if (pinCode == it) {
pref.pin_code = pinCode pref.pinCode = pinCode
txtNotPin.isVisible = false txtNotPin.isVisible = false
navigate() navigate()
} else { } else {
...@@ -94,7 +94,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) { ...@@ -94,7 +94,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
} }
private fun navigate() { private fun navigate() {
pref.pin_code = pinCode pref.pinCode = pinCode
val manager = FingerprintManagerCompat.from(requireContext()) val manager = FingerprintManagerCompat.from(requireContext())
val isEnabled = manager.isHardwareDetected && manager.hasEnrolledFingerprints() val isEnabled = manager.isHardwareDetected && manager.hasEnrolledFingerprints()
......
package com.mobiuz.app.dev.ui.global package com.mobiuz.app.dev.ui.global
object CONSTANTS { object CONSTANTS {
const val LOGIN = "login"
const val BASE_URL = "http://10.160.45.60/api/v1/" const val BASE_URL = "http://10.160.45.60/api/v1/"
const val ROOM = "room" const val ROOM = "room"
const val RU = "ru" const val RU = "ru"
...@@ -17,10 +18,24 @@ object CONSTANTS { ...@@ -17,10 +18,24 @@ object CONSTANTS {
const val TARIFFS = "tariffs" const val TARIFFS = "tariffs"
const val PACKETS = "packets" const val PACKETS = "packets"
const val PASSWORD = "password" const val PASSWORD = "password"
const val OLD_PASSWORD = "old_password"
const val LATEST_PASSWORD = "latest_password"
const val MINUTES = "minutes" const val MINUTES = "minutes"
const val TYPE_VERIFICATION = "type_verification" const val TYPE_VERIFICATION = "type_verification"
const val TYPE_FORGET = "type_forget" const val TYPE_FORGET = "type_forget"
const val FIRST = "first" const val FIRST = "first"
const val HELP_BOT = "@MobiuzHelpBot"
const val FEEDBACK = "https://company.mobi.uz/ru/feedback/"
const val EMAIL = "info@mobi.uz"
const val PHONE1 = "0890"
const val PHONE2 = "+998 97 130 09 09"
const val PHONE3 = "+998 97 203 10 10"
const val SERVICE = "service"
const val TYPE_PASSWORD = "TYPE_PASSWORD"
const val CURRENT_PASSWORD = "CURRENT_PASSWORD"
const val NEW_PASSWORD = "NEW_PASSWORD"
const val CONFIRM_NEW_PASSWORD = "CONFIRM_NEW_PASSWORD"
const val DEFAULT_PHONE = "+998 97 999-99-99"
const val LONGITUDE = 69.2602108116081 const val LONGITUDE = 69.2602108116081
const val LATITUDE = 41.34823322480444 const val LATITUDE = 41.34823322480444
......
package com.mobiuz.app.dev.ui.service package com.mobiuz.app.dev.ui.service
import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.gson.Gson
import com.mobiuz.app.dev.model.ServiceData
import com.mobiuz.app.dev.ui.global.CONSTANTS
class FragmentPagerAdapter(fragment: Fragment, private val list: List<String>): FragmentStateAdapter(fragment) { class FragmentPagerAdapter(fragment: Fragment, private val service: ServiceData): FragmentStateAdapter(fragment) {
override fun getItemCount() = list.size override fun getItemCount() = service.data.size
override fun createFragment(position: Int): Fragment { override fun createFragment(position: Int): Fragment {
return ActionFragment() return ActionFragment().apply {
this.arguments = bundleOf(CONSTANTS.SERVICE to Gson().toJson(service.data[position]))
}
} }
} }
\ No newline at end of file
package com.mobiuz.app.dev.ui.service
data class UssdData(
val title:String,
val tariff:String,
val code:String,
val text_button:String,
)
package com.mobiuz.app.dev.ui.service.packets
import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.google.android.material.tabs.TabLayoutMediator
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentPaketsBinding
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.service.FragmentPagerAdapter
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class PacketsFragment : BaseFragment(R.layout.fragment_pakets) {
private lateinit var mainViewModel: MainViewModel
private var _bn: FragmentPaketsBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var adapter : FragmentPagerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentPaketsBinding.bind(view)
adapter = FragmentPagerAdapter(this, arrayListOf("","","","",""))
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
viewPager.adapter = adapter
toolbar.setNavigationOnClickListener {
requireActivity().finish()
}
TabLayoutMediator(bn.tabLayout,bn.viewPager){tab,pos->
when(pos){
0 -> tab.text = "Месячные "
1 -> tab.text = "Суточные "
2 -> tab.text = "Ночные "
3 -> tab.text = "Ночной Драйв "
else -> tab.text = "OnNet "
}
}.attach()
}
}
override fun collects() {
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
package com.mobiuz.app.dev.ui.service.tarifes
import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.google.android.material.tabs.TabLayoutMediator
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentTarifsBinding
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.service.FragmentPagerAdapter
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class TariffsFragment : BaseFragment(R.layout.fragment_tarifs) {
private lateinit var mainViewModel: MainViewModel
private var _bn: FragmentTarifsBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var adapter : FragmentPagerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentTarifsBinding.bind(view)
adapter = FragmentPagerAdapter(this, arrayListOf("",""))
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
viewPager.adapter = adapter
toolbar.setNavigationOnClickListener {
requireActivity().finish()
}
TabLayoutMediator(bn.tabLayout,bn.viewPager){tab,pos->
if(pos == 0){
tab.text = "Активные"
}else{
tab.text = "Годовые"
}
}.attach()
}
}
override fun collects() {
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
package com.mobiuz.app.dev.ui.settings package com.mobiuz.app.dev.ui.settings
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 androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
...@@ -8,9 +10,10 @@ import androidx.navigation.fragment.NavHostFragment ...@@ -8,9 +10,10 @@ import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivitySettingsBinding import com.mobiuz.app.databinding.ActivitySettingsBinding
import com.mobiuz.app.dev.model.SharedPref import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.global.CONSTANTS import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.FullScreenDialog
import com.mobiuz.app.dev.utils.LocaleHelper import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.Utils
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject import javax.inject.Inject
...@@ -30,28 +33,28 @@ class SettingsActivity : AppCompatActivity() { ...@@ -30,28 +33,28 @@ class SettingsActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
_bn = ActivitySettingsBinding.inflate(layoutInflater) _bn = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(bn.root) setContentView(bn.root)
window.statusBarColor = Color.WHITE
val window = window.decorView val window = window.decorView
window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
val fragment = supportFragmentManager.findFragmentById(R.id.settings_container) as NavHostFragment val fragment = supportFragmentManager.findFragmentById(R.id.settings_container) as NavHostFragment
navController = NavHostFragment.findNavController(fragment) navController = NavHostFragment.findNavController(fragment)
intent?.let { intent?.let {
val type = it.getStringExtra(CONSTANTS.TYPE_SETTINGS) when (it.getStringExtra(CONSTANTS.TYPE_SETTINGS)) {
when (type) {
CONSTANTS.PROFILE -> { CONSTANTS.PROFILE -> {
navController.popBackStack() navController.popBackStack()
navController.navigate(R.id.profileFragment, null, Utils.navOptions()) navController.navigate(R.id.profileFragment)
} }
CONSTANTS.SUPPORT -> { CONSTANTS.SUPPORT -> {
navController.popBackStack() navController.popBackStack()
navController.navigate(R.id.supportFragment, null, Utils.navOptions()) navController.navigate(R.id.supportFragment)
} }
CONSTANTS.SAFETY -> { CONSTANTS.SAFETY -> {
navController.popBackStack() navController.popBackStack()
navController.navigate(R.id.safetyFragment, null, Utils.navOptions()) navController.navigate(R.id.safetyFragment)
} }
else -> Unit else -> Unit
...@@ -59,8 +62,38 @@ class SettingsActivity : AppCompatActivity() { ...@@ -59,8 +62,38 @@ class SettingsActivity : AppCompatActivity() {
} }
} }
override fun onResume() {
super.onResume()
if(pref.isShowPin){
showPinCode()
}else{
pref.isShowPin = true
}
}
private fun showPinCode() {
intent?.let {
val arg = it.getStringExtra(CONSTANTS.FIRST) ?: ""
if (arg.isEmpty()) {
val dialog = FullScreenDialog()
dialog.setOnPinDoneListener {
finish()
pref.clearUserData()
val intent = Intent(this, AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
dialog.dismiss()
}
dialog.show(supportFragmentManager, "tag")
}
it.removeExtra(CONSTANTS.FIRST)
}
}
override fun onDestroy() { override fun onDestroy() {
pref.isShowPin = false
_bn = null _bn = null
super.onDestroy() super.onDestroy()
} }
} }
\ No newline at end of file
...@@ -3,14 +3,16 @@ package com.mobiuz.app.dev.ui.settings.safety ...@@ -3,14 +3,16 @@ package com.mobiuz.app.dev.ui.settings.safety
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.SeekBar import android.widget.SeekBar
import androidx.core.os.bundleOf
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import com.airbnb.lottie.utils.Utils
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentSafetyBinding import com.mobiuz.app.databinding.FragmentSafetyBinding
import com.mobiuz.app.dev.model.SharedPref import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.showMessage import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject import javax.inject.Inject
...@@ -36,8 +38,11 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) { ...@@ -36,8 +38,11 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
toolbar.setNavigationOnClickListener { toolbar.setNavigationOnClickListener {
requireActivity().finish() navController.navigateUp()
} }
val text = getString(R.string.settings_safety)
val myText = text.replace(CONSTANTS.DEFAULT_PHONE,pref.userPhone)
txtPhoneSafety.text = myText
switchBiometria.isChecked = pref.isUseFingerPrint switchBiometria.isChecked = pref.isUseFingerPrint
switchBiometria.setOnCheckedChangeListener { _, isChecked -> switchBiometria.setOnCheckedChangeListener { _, isChecked ->
val message = if(isChecked) "Biometric enabled" else "Biometric disabled" val message = if(isChecked) "Biometric enabled" else "Biometric disabled"
...@@ -50,11 +55,12 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) { ...@@ -50,11 +55,12 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
}) })
btnChangePin.setOnClickListener(object : ButtonClick(){ btnChangePin.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
navController.navigate(R.id.oldPinFragment,null, Utils.navOptions())
} }
}) })
btnChangePassword.setOnClickListener(object : ButtonClick(){ btnChangePassword.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
navController.navigate(R.id.currentPasswordFragment,null,com.mobiuz.app.dev.utils.Utils.navOptions()) navController.navigate(R.id.currentPasswordFragment, bundleOf(CONSTANTS.TYPE_PASSWORD to CONSTANTS.CURRENT_PASSWORD),Utils.navOptions())
} }
}) })
btn4.setOnClickListener(object : ButtonClick(){ btn4.setOnClickListener(object : ButtonClick(){
......
package com.mobiuz.app.dev.ui.settings.safety.password package com.mobiuz.app.dev.ui.settings.safety.password
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 androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentConfirmPasswordBinding import com.mobiuz.app.databinding.FragmentChangePasswordBinding
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.model.UserAuth
import com.mobiuz.app.dev.network.model.ChangePassword
import com.mobiuz.app.dev.network.model.UiStateObject import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.auth.AuthViewModel import com.mobiuz.app.dev.ui.auth.AuthViewModel
import com.mobiuz.app.dev.ui.base.BaseFragment import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.TextWatcherWrapper import com.mobiuz.app.dev.ui.global.TextWatcherWrapper
import com.mobiuz.app.dev.utils.Utils import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.getColorCompat import com.mobiuz.app.dev.utils.extensions.getColorCompat
import com.mobiuz.app.dev.utils.extensions.showCustomDialog
import com.mobiuz.app.dev.utils.extensions.showMessage
import com.mobiuz.app.dev.utils.hideKeyboard import com.mobiuz.app.dev.utils.hideKeyboard
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password) { class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
private var _bn: FragmentConfirmPasswordBinding? = null @Inject
lateinit var pref: SharedPref
private var _bn: FragmentChangePasswordBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) } private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var password = "" private var type = ""
private var phone = "" private var count = 3
private lateinit var decorView: View
private var oldPassword = ""
private var newPassword = ""
private val viewModel: AuthViewModel by viewModels() private val viewModel: AuthViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
arguments?.let { arguments?.let {
password = it.getString(CONSTANTS.PASSWORD, "") oldPassword = it.getString(CONSTANTS.OLD_PASSWORD, "") ?: ""
newPassword = it.getString(CONSTANTS.LATEST_PASSWORD, "") ?: ""
type = it.getString(CONSTANTS.TYPE_PASSWORD, "") ?: ""
} }
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentConfirmPasswordBinding.bind(view) _bn = FragmentChangePasswordBinding.bind(view)
setUpUI() setUpUI()
collects() collects()
...@@ -49,16 +69,41 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password) ...@@ -49,16 +69,41 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password)
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
val text = when (type) {
CONSTANTS.CURRENT_PASSWORD ->{
txtForgetPassword.isVisible = true
getString(R.string.enter_current_password)
}
CONSTANTS.NEW_PASSWORD -> {
getString(R.string.enter_new_password)
}
else -> {
getString(R.string.enter_confirm_new_password)
}
}
txtPassword.text = text
viewGroup.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
}
})
txtForgetPassword.setOnClickListener(object : ButtonClick() { txtForgetPassword.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
// viewModel.forgetPassword(UserAuth(phone.replace(" ", "").replace("+", ""))) if(type == CONSTANTS.CURRENT_PASSWORD){
viewModel.forgetPassword(UserAuth(pref.userPhone.replace(" ", "").replace("+", "")))
}
} }
}) })
inputPassword.addTextChangedListener(object : TextWatcherWrapper() { inputPassword.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count) super.onTextChanged(s, start, before, count)
if (s.toString() == password) { if(type == CONSTANTS.CONFIRM_NEW_PASSWORD){
if (s.toString() == newPassword) {
imageCheck.setImageResource(R.drawable.ic_baseline_check_circle) imageCheck.setImageResource(R.drawable.ic_baseline_check_circle)
txtCheckConfirm.text = getString(R.string.password_same) txtCheckConfirm.text = getString(R.string.password_same)
txtCheckConfirm.setTextColor(getColorCompat(R.color.green100)) txtCheckConfirm.setTextColor(getColorCompat(R.color.green100))
...@@ -69,6 +114,15 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password) ...@@ -69,6 +114,15 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password)
btnLogin.isEnabled = false btnLogin.isEnabled = false
txtCheckConfirm.setTextColor(getColorCompat(R.color.primary100)) txtCheckConfirm.setTextColor(getColorCompat(R.color.primary100))
} }
imageCheck.isVisible = true
txtCheckConfirm.isVisible = true
}else{
loadError(false)
btnLogin.isEnabled = s.toString().length > 3
imageCheck.isVisible = false
txtCheckConfirm.isVisible = false
}
} }
}) })
...@@ -88,9 +142,31 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password) ...@@ -88,9 +142,31 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password)
} }
else -> { else -> {
bn.btnLogin.hideKeyboard() bn.btnLogin.hideKeyboard()
showToastMessage(getString(R.string.password_changed)) when (type) {
navController.popBackStack(R.id.safetyFragment, false) CONSTANTS.CURRENT_PASSWORD -> {
// viewModel.login(UserAuth(phone.replace(" ", "").replace("+", ""), password)) oldPassword = password
viewModel.checkPassword(UserAuth(password = oldPassword))
}
CONSTANTS.NEW_PASSWORD -> {
navController.navigate(
R.id.currentPasswordFragment,
bundleOf(
CONSTANTS.TYPE_PASSWORD to CONSTANTS.CONFIRM_NEW_PASSWORD,
CONSTANTS.OLD_PASSWORD to oldPassword,
CONSTANTS.LATEST_PASSWORD to password,
), Utils.navOptions()
)
}
CONSTANTS.CONFIRM_NEW_PASSWORD -> {
if (newPassword == password) {
viewModel.changePassword(ChangePassword(oldPassword,newPassword))
}
}
}
} }
} }
...@@ -103,13 +179,78 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password) ...@@ -103,13 +179,78 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password)
} }
} }
private fun loadError(status:Boolean){
bn.apply {
if (count == 0){
errorTitle.text = getString(R.string.impossible_change_password)
errorText.text = getString(R.string.popitok_error_password)
}else{
errorText.text = getString(R.string.popitok,count.toString())
}
errorLayout.isVisible = status
div.setBackgroundColor(if(status) getColorCompat(R.color.primary100) else Color.TRANSPARENT)
decorView = requireActivity().window.decorView
decorView.systemUiVisibility = if(status) View.VISIBLE else{decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR}
}
}
override fun collects() { override fun collects() {
viewLifecycleOwner.lifecycleScope.launchWhenStarted { viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.loginUiState.collect { viewModel.checkPasswordUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
navController.navigate(
R.id.currentPasswordFragment,
bundleOf(
CONSTANTS.OLD_PASSWORD to oldPassword,
CONSTANTS.TYPE_PASSWORD to CONSTANTS.NEW_PASSWORD
),
Utils.navOptions()
)
showProgressDialog(false)
}
is UiStateObject.ERROR -> {
if(it.message == "Invalid password"){
count--
if(count == 0){
loadError(true)
showCustomDialog(getString(R.string.impossible_change_password), false){
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
intent.putExtra(CONSTANTS.PHONE, pref.userPhone)
startActivity(intent)
requireActivity().finish()
}
}else{
loadError(true)
}
}else{
showToastMessage(it.message)
}
showProgressDialog(false)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.changePasswordUiState.collect {
when (it) { when (it) {
is UiStateObject.SUCCESS -> { is UiStateObject.SUCCESS -> {
showProgressDialog(false) showProgressDialog(false)
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions()) showCustomDialog(getString(R.string.password_updated),true){
navController.popBackStack(R.id.safetyFragment, false)
}
} }
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
showProgressDialog(false) showProgressDialog(false)
...@@ -127,15 +268,13 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password) ...@@ -127,15 +268,13 @@ class ConfirmPasswordFragment : BaseFragment(R.layout.fragment_confirm_password)
viewModel.forgetPasswordUiState.collect { viewModel.forgetPasswordUiState.collect {
when (it) { when (it) {
is UiStateObject.SUCCESS -> { is UiStateObject.SUCCESS -> {
requireActivity().finish()
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.TYPE_VERIFICATION)
intent.putExtra(CONSTANTS.PHONE, pref.userPhone)
startActivity(intent)
showProgressDialog(false) showProgressDialog(false)
navController.navigate(
R.id.myVerificationFragment,
bundleOf(
CONSTANTS.PHONE to phone,
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_FORGET
),
Utils.navOptions()
)
} }
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
showProgressDialog(false) showProgressDialog(false)
......
package com.mobiuz.app.dev.ui.settings.safety.password
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 com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentCurrentPasswordBinding
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.auth.AuthViewModel
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.TextWatcherWrapper
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.hideKeyboard
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
@AndroidEntryPoint
class CurrentPasswordFragment : BaseFragment(R.layout.fragment_current_password) {
private var _bn: FragmentCurrentPasswordBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var phone = ""
private val viewModel: AuthViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
phone = it.getString(CONSTANTS.PHONE, "")
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentCurrentPasswordBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
txtForgetPassword.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
// viewModel.forgetPassword(UserAuth(phone.replace(" ", "").replace("+", "")))
}
})
inputPassword.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
btnLogin.isEnabled = (s.toString().length > 3)
}
})
btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
val password = inputPassword.text.toString().trim()
when {
password.length < 4 -> {
inputPassword.startAnimation(
android.view.animation.AnimationUtils.loadAnimation(
requireContext(),
R.anim.shake
)
)
}
else -> {
bn.btnLogin.hideKeyboard()
navController.navigate(R.id.newPasswordFragment,null,com.mobiuz.app.dev.utils.Utils.navOptions())
// viewModel.login(UserAuth(phone.replace(" ", "").replace("+", ""), password))
}
}
}
})
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
}
}
override fun collects() {
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.loginUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showToastMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.forgetPasswordUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(
R.id.myVerificationFragment,
bundleOf(
CONSTANTS.PHONE to phone,
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_FORGET
),
Utils.navOptions()
)
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showToastMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
package com.mobiuz.app.dev.ui.settings.safety.password
import android.os.Bundle
import android.view.View
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentNewPasswordBinding
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.auth.AuthViewModel
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.TextWatcherWrapper
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.hideKeyboard
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
@AndroidEntryPoint
class NewPasswordFragment : BaseFragment(R.layout.fragment_new_password) {
private var _bn: FragmentNewPasswordBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var phone = ""
private val viewModel: AuthViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
phone = it.getString(CONSTANTS.PHONE, "")
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentNewPasswordBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
txtForgetPassword.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
// viewModel.forgetPassword(UserAuth(phone.replace(" ", "").replace("+", "")))
}
})
inputPassword.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
bn.helperPassword.isVisible = false
btnLogin.isEnabled = (s.toString().length > 3)
}
})
btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
val password = inputPassword.text.toString().trim()
when {
password.length < 4 -> {
inputPassword.startAnimation(
android.view.animation.AnimationUtils.loadAnimation(
requireContext(),
R.anim.shake
)
)
}
else -> {
bn.btnLogin.hideKeyboard()
navController.navigate(R.id.confirmPasswordFragment, bundleOf(CONSTANTS.PASSWORD to password),Utils.navOptions())
// viewModel.login(UserAuth(phone.replace(" ", "").replace("+", ""), password))
}
}
}
})
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
}
}
override fun collects() {
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.loginUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
bn.helperPassword.isVisible = false
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showToastMessage(it.message)
bn.helperPassword.isVisible = false
}
is UiStateObject.LOADING -> {
bn.helperPassword.isVisible = false
showProgressDialog(true)
}
else -> Unit
}
}
}
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.forgetPasswordUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(
R.id.myVerificationFragment,
bundleOf(
CONSTANTS.PHONE to phone,
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_FORGET
),
Utils.navOptions()
)
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showToastMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
package com.mobiuz.app.dev.ui.settings.safety.pin
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentConfirmNewPinBinding
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.pin.PinAdapter
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.utils.extensions.getColorCompat
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
@AndroidEntryPoint
class ConfirmNewPinFragment : BaseFragment(R.layout.fragment_confirm_new_pin) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentConfirmNewPinBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var pinCode = ""
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
private lateinit var decorView: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
pinCode = it.getString("pinCode", "") ?: ""
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentConfirmNewPinBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
loadData()
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
rvPin.adapter = pinAdapter
pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated {
delay(50)
if (pinCode == it) {
navigate()
} else {
cardPin.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
loadError(true)
}
}
}
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
for (i in 0 until btnViewGroup.childCount) {
btnViewGroup.getChildAt(i).setOnClickListener {
when (it.id) {
R.id.btn_remove -> {
loadError(false)
pinAdapter.removeItem()
}
R.id.btn_forget_pin -> {
}
else -> {
loadError(false)
val text = it as TextView
pinAdapter.addItem(text.text.toString().toInt())
}
}
}
}
}
}
private fun loadError(status: Boolean) {
bn.apply {
errorLayout.isVisible = status
div.setBackgroundColor(if (status) getColorCompat(R.color.primary100) else Color.TRANSPARENT)
decorView = requireActivity().window.decorView
decorView.systemUiVisibility = if (status) View.VISIBLE else {
decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
}
}
private fun navigate() {
showMessage(getString(R.string.pin_code_updated))
navController.popBackStack(R.id.safetyFragment, false)
}
private fun loadData() {
data.clear()
for (i in 0..3) {
data.add(PinData(-1))
}
pinAdapter.submitList(data)
}
override fun collects() {
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/grey20"/>
</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/primary100"/>
</shape>
\ No newline at end of file
...@@ -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"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true"> android:fitsSystemWindows="false">
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/settings_container" android:id="@+id/settings_container"
......
<?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:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:fitsSystemWindows="true"
android:orientation="vertical"> android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:id="@+id/rv_ussd_command" android:id="@+id/rv_ussd_command"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:layout_marginHorizontal="12dp" android:layout_marginHorizontal="12dp"
tools:listitem="@layout/item_ussd" android:layoutAnimation="@anim/layout_animation"
android:layout_height="match_parent"/> app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_ussd" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -3,28 +3,70 @@ ...@@ -3,28 +3,70 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:id="@+id/view_group"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="false"
android:orientation="vertical"> android:orientation="vertical">
<View
android:layout_width="match_parent"
android:id="@+id/div"
app:layout_constraintTop_toTopOf="parent"
android:background="@android:color/transparent"
android:layout_height="24dp"/>
<FrameLayout
android:layout_width="match_parent"
android:id="@+id/frame"
app:layout_constraintTop_toBottomOf="@id/div"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" app:navigationIcon="@drawable/ic_baseline_arrow_back" />
app:navigationIcon="@drawable/ic_baseline_arrow_back"
/> <LinearLayout
android:layout_width="match_parent"
android:gravity="center"
android:visibility="invisible"
android:id="@+id/error_layout"
android:orientation="vertical"
android:background="@color/primary100"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:textColor="@color/white100"
android:id="@+id/error_title"
android:layout_height="wrap_content"
android:text="@string/wrong_password"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:textColor="@color/white100"
android:id="@+id/error_text"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_14sdp"
android:text="@string/popitok"
android:textSize="14sp" />
</LinearLayout>
</FrameLayout>
<TextView <TextView
style="@style/TitleTextStyle"
android:id="@+id/txt_password" android:id="@+id/txt_password"
android:layout_marginHorizontal="@dimen/_12sdp" style="@style/TitleTextStyle"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp" android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_confirm_new_password" android:text="@string/enter_current_password"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/txt_hint_confirm" app:layout_constraintBottom_toTopOf="@id/txt_hint_confirm"
app:layout_constraintTop_toBottomOf="@id/toolbar" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/frame" />
<TextView <TextView
...@@ -33,8 +75,8 @@ ...@@ -33,8 +75,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="60dp" android:layout_marginTop="60dp"
android:text="@string/enter_password" android:text="@string/enter_password"
android:textSize="15sp"
android:textColor="@color/black75" android:textColor="@color/black75"
android:textSize="15sp"
app:layout_constraintStart_toStartOf="@id/layout_input_password" app:layout_constraintStart_toStartOf="@id/layout_input_password"
app:layout_constraintTop_toBottomOf="@id/txt_password" /> app:layout_constraintTop_toBottomOf="@id/txt_password" />
...@@ -56,9 +98,9 @@ ...@@ -56,9 +98,9 @@
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:inputType="numberPassword" android:inputType="numberPassword"
android:maxLength="7" android:maxLength="7"
android:textSize="@dimen/_12sdp"
android:paddingVertical="@dimen/_12sdp" android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp" android:paddingStart="@dimen/_12sdp"
android:textSize="@dimen/_12sdp"
tools:ignore="RtlSymmetry" /> tools:ignore="RtlSymmetry" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
...@@ -86,19 +128,19 @@ ...@@ -86,19 +128,19 @@
app:layout_constraintStart_toEndOf="@id/image_check" app:layout_constraintStart_toEndOf="@id/image_check"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" /> app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
<TextView <TextView
android:id="@+id/txt_forget_password" android:id="@+id/txt_forget_password"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginEnd="@dimen/_10sdp"
android:background="?android:selectableItemBackground"
android:padding="@dimen/_6sdp" android:padding="@dimen/_6sdp"
android:textSize="16sp"
android:text="@string/forget_password" android:text="@string/forget_password"
android:background="?android:selectableItemBackground"
android:textColor="@color/grey110" android:textColor="@color/grey110"
android:textSize="16sp"
android:textStyle="bold" android:textStyle="bold"
android:layout_marginTop="@dimen/_16sdp" android:visibility="invisible"
android:layout_marginEnd="@dimen/_10sdp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" /> app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
...@@ -106,14 +148,14 @@ ...@@ -106,14 +148,14 @@
<Button <Button
android:id="@+id/btn_login" android:id="@+id/btn_login"
android:layout_width="match_parent" android:layout_width="match_parent"
android:enabled="false"
android:textSize="@dimen/_12sdp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:layout_marginHorizontal="@dimen/_12sdp" android:layout_marginHorizontal="@dimen/_12sdp"
android:layout_marginTop="@dimen/_34sdp" android:layout_marginTop="@dimen/_34sdp"
android:enabled="false"
android:text="@string/enter" android:text="@string/enter"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" android:textSize="@dimen/_12sdp"
app:layout_constraintBottom_toBottomOf="parent" /> app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:id="@+id/view_group"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_baseline_arrow_back"
/>
<TextView
style="@style/TitleTextStyle"
android:id="@+id/txt_password"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_current_password"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/txt_hint_confirm"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<TextView
android:id="@+id/txt_hint_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:text="@string/enter_password"
android:textSize="15sp"
android:textColor="@color/black75"
app:layout_constraintStart_toStartOf="@id/layout_input_password"
app:layout_constraintTop_toBottomOf="@id/txt_password" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginEnd="@dimen/_12sdp"
app:endIconMode="password_toggle"
app:layout_constraintTop_toBottomOf="@id/txt_hint_confirm">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/edit_text_unchecked"
android:imeOptions="actionDone"
android:inputType="numberPassword"
android:maxLength="7"
android:textSize="@dimen/_12sdp"
android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp"
tools:ignore="RtlSymmetry" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/txt_forget_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_6sdp"
android:textSize="16sp"
android:text="@string/forget_password"
android:background="?android:selectableItemBackground"
android:textColor="@color/grey110"
android:textStyle="bold"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginEnd="@dimen/_10sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:enabled="false"
android:textSize="@dimen/_12sdp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginHorizontal="@dimen/_12sdp"
android:layout_marginTop="@dimen/_34sdp"
android:text="@string/enter"
app:layout_constraintTop_toBottomOf="@id/layout_input_password"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
tools:openDrawer="start">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:elevation="4dp"
app:itemIconSize="24dp"
app:itemIconTint="@color/nav_item_tint"
app:itemTextColor="@color/nav_item_tint"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_nav_menu" />
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/white100"
android:fitsSystemWindows="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/header"
layout="@layout/layout_home_header"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="@dimen/_14sdp"
android:background="@color/grey20" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/btn_safety"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/_24sdp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal"
android:paddingVertical="18dp"
android:paddingStart="30dp"
android:paddingEnd="13dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_safety" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="@string/bezopasnost"
android:textSize="16sp"
android:textStyle="bold" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_baseline_keyboard_arrow_right" />
</LinearLayout>
<LinearLayout
android:id="@+id/btn_language"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/_10sdp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal"
android:paddingVertical="10dp"
android:paddingStart="30dp"
android:paddingEnd="13dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_image_language" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@string/language_app"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_language"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="Русский"
android:textColor="@color/grey80"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_baseline_keyboard_arrow_right" />
</LinearLayout>
<LinearLayout
android:id="@+id/btn_support"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/_10sdp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal"
android:paddingVertical="18dp"
android:paddingStart="30dp"
android:paddingEnd="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_image_support" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="@string/support"
android:textSize="16sp"
android:textStyle="bold" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_baseline_keyboard_arrow_right" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="@dimen/_14sdp"
android:background="@color/grey20" />
<TextView
android:id="@+id/txt_redact_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="30dp"
android:background="?android:selectableItemBackground"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/redact_data"
android:textColor="@color/link"
android:textSize="14sp" />
<TextView
android:id="@+id/txt_public_oferta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="12dp"
android:background="?android:selectableItemBackground"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/public_oferta"
android:textColor="@color/link"
android:textSize="14sp" />
<TextView
android:id="@+id/txt_confidensialnost"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="20dp"
android:background="?android:selectableItemBackground"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/txt_confidensialnost"
android:textColor="@color/link"
android:textSize="14sp" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout
android:id="@+id/btn_exit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal"
android:paddingVertical="16dp"
android:paddingStart="30dp"
android:paddingEnd="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_log_out" />
<TextView
android:id="@+id/txt_user_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:text="@string/exit"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_user_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="v 0.01.1"
android:textColor="@color/grey80"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
\ No newline at end of file
...@@ -161,10 +161,11 @@ ...@@ -161,10 +161,11 @@
<TextView <TextView
android:id="@+id/sent_code_again" android:id="@+id/sent_code_again"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true" android:gravity="center"
android:layout_marginTop="@dimen/_10sdp" android:layout_marginTop="@dimen/_10sdp"
android:layout_marginHorizontal="@dimen/_16sdp"
android:background="?selectableItemBackground" android:background="?selectableItemBackground"
android:padding="@dimen/_10sdp" android:padding="@dimen/_10sdp"
android:text="@string/sent_code_again" android:text="@string/sent_code_again"
......
<?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"
android:fitsSystemWindows="false"
android:background="@color/white"
android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_marginTop="24dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationIcon="@drawable/ic_baseline_arrow_back" />
<TextView
android:id="@+id/txt_enter_pin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_14sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_new_pin"
android:textSize="29sp"
android:textStyle="bold" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.8">
<TextView
android:id="@+id/txt_not_pin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginBottom="@dimen/_30sdp"
android:text="@string/pin_not_same"
android:textColor="@color/primary100"
android:textSize="16sp"
android:textStyle="bold"
android:visibility="gone" />
<LinearLayout
android:layout_width="@dimen/_100sdp"
android:layout_gravity="center"
android:orientation="vertical"
android:gravity="center"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/card_pin"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_height="wrap_content"
app:cardCornerRadius="0dp"
android:minWidth="@dimen/_100sdp"
android:minHeight="@dimen/_32sdp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pin"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="4"
tools:listitem="@layout/item_pin" />
</com.google.android.material.card.MaterialCardView>
<View
android:layout_width="@dimen/_120sdp"
android:background="@color/grey30"
android:layout_height="2dp"/>
</LinearLayout>
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/btn_view_group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:paddingStart="@dimen/_44sdp"
android:paddingEnd="@dimen/_44sdp">
<TextView
android:id="@+id/btn_1"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_2"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_2"
app:layout_constraintEnd_toStartOf="@id/btn_3"
app:layout_constraintStart_toEndOf="@id/btn_1"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_3"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_4"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_1" />
<TextView
android:id="@+id/btn_5"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_5"
app:layout_constraintEnd_toStartOf="@id/btn_6"
app:layout_constraintStart_toEndOf="@id/btn_4"
app:layout_constraintTop_toTopOf="@id/btn_4" />
<TextView
android:id="@+id/btn_6"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_4" />
<TextView
android:id="@+id/btn_7"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_4" />
<TextView
android:id="@+id/btn_8"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_8"
app:layout_constraintEnd_toStartOf="@id/btn_9"
app:layout_constraintStart_toEndOf="@id/btn_7"
app:layout_constraintTop_toTopOf="@id/btn_7" />
<TextView
android:id="@+id/btn_9"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_7" />
<TextView
android:id="@+id/btn_0"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_0"
app:layout_constraintEnd_toEndOf="@id/btn_8"
app:layout_constraintStart_toStartOf="@id/btn_8"
app:layout_constraintTop_toBottomOf="@id/btn_7" />
<ImageView
android:id="@+id/btn_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/remove"
android:padding="@dimen/_4sdp"
android:src="@drawable/ic_vector_remove"
app:layout_constraintBottom_toBottomOf="@id/btn_0"
app:layout_constraintEnd_toEndOf="@id/btn_9"
app:layout_constraintStart_toStartOf="@id/btn_9"
app:layout_constraintTop_toTopOf="@id/btn_0" />
<TextView
android:layout_width="match_parent"
app:layout_constraintTop_toBottomOf="@id/btn_0"
android:text="@string/forget_pin"
android:gravity="center"
android:id="@+id/btn_forget_pin"
android:paddingVertical="12dp"
android:background="?android:selectableItemBackground"
android:textSize="14sp"
android:textStyle="bold"
android:layout_marginTop="@dimen/_20sdp"
android:textColor="@color/primary100"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
\ 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:fitsSystemWindows="false"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:id="@+id/div"
android:background="@android:color/transparent"
android:layout_height="24dp"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationIcon="@drawable/ic_baseline_arrow_back" />
<LinearLayout
android:layout_width="match_parent"
android:gravity="center"
android:visibility="invisible"
android:id="@+id/error_layout"
android:orientation="vertical"
android:background="@color/primary100"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:textColor="@color/white100"
android:id="@+id/error_title"
android:layout_height="wrap_content"
android:text="@string/wrong_pin"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:textColor="@color/white100"
android:id="@+id/error_text"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_14sdp"
android:text="@string/popitok"
android:textSize="14sp" />
</LinearLayout>
</FrameLayout>
<TextView
android:id="@+id/txt_enter_pin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_14sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_old_pin"
android:textSize="29sp"
android:textStyle="bold" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.8">
<LinearLayout
android:layout_width="@dimen/_100sdp"
android:layout_gravity="center"
android:orientation="vertical"
android:gravity="center"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/card_pin"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_height="wrap_content"
app:cardCornerRadius="0dp"
android:minWidth="@dimen/_100sdp"
android:minHeight="@dimen/_32sdp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pin"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="4"
tools:listitem="@layout/item_pin" />
</com.google.android.material.card.MaterialCardView>
<View
android:layout_width="@dimen/_120sdp"
android:background="@color/grey30"
android:layout_height="2dp"/>
</LinearLayout>
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/btn_view_group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:paddingStart="@dimen/_44sdp"
android:paddingEnd="@dimen/_44sdp">
<TextView
android:id="@+id/btn_1"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_2"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_2"
app:layout_constraintEnd_toStartOf="@id/btn_3"
app:layout_constraintStart_toEndOf="@id/btn_1"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_3"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_4"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_1" />
<TextView
android:id="@+id/btn_5"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_5"
app:layout_constraintEnd_toStartOf="@id/btn_6"
app:layout_constraintStart_toEndOf="@id/btn_4"
app:layout_constraintTop_toTopOf="@id/btn_4" />
<TextView
android:id="@+id/btn_6"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_4" />
<TextView
android:id="@+id/btn_7"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_4" />
<TextView
android:id="@+id/btn_8"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_8"
app:layout_constraintEnd_toStartOf="@id/btn_9"
app:layout_constraintStart_toEndOf="@id/btn_7"
app:layout_constraintTop_toTopOf="@id/btn_7" />
<TextView
android:id="@+id/btn_9"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_7" />
<TextView
android:id="@+id/btn_0"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_0"
app:layout_constraintEnd_toEndOf="@id/btn_8"
app:layout_constraintStart_toStartOf="@id/btn_8"
app:layout_constraintTop_toBottomOf="@id/btn_7" />
<ImageView
android:id="@+id/btn_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/remove"
android:padding="@dimen/_4sdp"
android:src="@drawable/ic_vector_remove"
app:layout_constraintBottom_toBottomOf="@id/btn_0"
app:layout_constraintEnd_toEndOf="@id/btn_9"
app:layout_constraintStart_toStartOf="@id/btn_9"
app:layout_constraintTop_toTopOf="@id/btn_0" />
<TextView
android:layout_width="match_parent"
app:layout_constraintTop_toBottomOf="@id/btn_0"
android:text="@string/forget_pin"
android:gravity="center"
android:paddingVertical="12dp"
android:textSize="14sp"
android:background="?android:selectableItemBackground"
android:textStyle="bold"
android:id="@+id/btn_forget_pin"
android:layout_marginTop="@dimen/_20sdp"
android:textColor="@color/primary100"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
\ No newline at end of file
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
<FrameLayout <FrameLayout
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="0.8">
<TextView <TextView
android:id="@+id/txt_not_pin" android:id="@+id/txt_not_pin"
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:fitsSystemWindows="false"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
...@@ -10,18 +11,21 @@ ...@@ -10,18 +11,21 @@
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="34dp"
app:navigationIcon="@drawable/ic_baseline_arrow_back" app:navigationIcon="@drawable/ic_baseline_arrow_back"
app:title="@string/safety" /> app:title="@string/safety" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:background="@color/grey20" android:background="@color/grey20"
android:layout_marginTop="40dp" android:layout_marginTop="20dp"
android:paddingHorizontal="16dp" android:paddingHorizontal="24dp"
android:id="@+id/txt_phone_safety"
android:paddingVertical="12dp" android:paddingVertical="12dp"
android:textColor="@color/black80"
android:gravity="center" android:gravity="center"
android:layout_marginHorizontal="12dp" android:layout_marginHorizontal="12dp"
android:text="Настройки безопасности действуют только для основного номера +998 97 999-99-99" android:text="@string/settings_safety"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<LinearLayout <LinearLayout
......
...@@ -10,10 +10,19 @@ ...@@ -10,10 +10,19 @@
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
app:title="@string/support" app:title="@string/support"
android:layout_marginTop="24dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:navigationIcon="@drawable/ic_baseline_arrow_back" app:navigationIcon="@drawable/ic_baseline_arrow_back"
/> />
<ScrollView
android:layout_width="match_parent"
android:id="@+id/scrollView"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/btn_0890" android:id="@+id/btn_0890"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -26,6 +35,7 @@ ...@@ -26,6 +35,7 @@
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@string/phone"
android:layout_gravity="center" android:layout_gravity="center"
android:src="@drawable/ic_vector_phone" /> android:src="@drawable/ic_vector_phone" />
...@@ -37,14 +47,15 @@ ...@@ -37,14 +47,15 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="0890" tools:text="0890"
android:id="@+id/txt_phone1"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="15sp" /> android:textSize="15sp" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="Для абонентов" android:text="@string/for_abonent"
android:textSize="14sp" android:textSize="14sp"
android:textColor="@color/grey110" android:textColor="@color/grey110"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
...@@ -65,6 +76,7 @@ ...@@ -65,6 +76,7 @@
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:contentDescription="@string/phone"
android:src="@drawable/ic_vector_phone" /> android:src="@drawable/ic_vector_phone" />
<LinearLayout <LinearLayout
...@@ -75,14 +87,15 @@ ...@@ -75,14 +87,15 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="+998 97 130 09 09" tools:text="+998 97 130 09 09"
android:textStyle="bold" android:textStyle="bold"
android:id="@+id/txt_phone2"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="15sp" /> android:textSize="15sp" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="Со всех номеров" android:text="@string/all_nomer"
android:textSize="14sp" android:textSize="14sp"
android:textColor="@color/grey110" android:textColor="@color/grey110"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
...@@ -103,6 +116,7 @@ ...@@ -103,6 +116,7 @@
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:contentDescription="@string/phone"
android:src="@drawable/ic_vector_phone" /> android:src="@drawable/ic_vector_phone" />
<LinearLayout <LinearLayout
...@@ -113,14 +127,15 @@ ...@@ -113,14 +127,15 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="+99897 203 10 10" tools:text="+998 97 203 10 10"
android:textStyle="bold" android:textStyle="bold"
android:id="@+id/txt_phone3"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="15sp" /> android:textSize="15sp" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="Связь с нами" android:text="@string/contact_us"
android:textSize="14sp" android:textSize="14sp"
android:textColor="@color/grey110" android:textColor="@color/grey110"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
...@@ -141,6 +156,7 @@ ...@@ -141,6 +156,7 @@
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:contentDescription="@string/telegram_bot"
android:src="@drawable/ic_vector_telegram" /> android:src="@drawable/ic_vector_telegram" />
<LinearLayout <LinearLayout
...@@ -151,14 +167,15 @@ ...@@ -151,14 +167,15 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="MobiuzHelpBot " tools:text="MobiuzHelpBot"
android:textStyle="bold" android:textStyle="bold"
android:id="@+id/txt_help_bot"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="15sp" /> android:textSize="15sp" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="Телеграмм бот" android:text="@string/telegram_bot"
android:textSize="14sp" android:textSize="14sp"
android:textColor="@color/grey110" android:textColor="@color/grey110"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
...@@ -179,6 +196,7 @@ ...@@ -179,6 +196,7 @@
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:contentDescription="@string/email"
android:src="@drawable/ic_group_message" /> android:src="@drawable/ic_group_message" />
<LinearLayout <LinearLayout
...@@ -189,14 +207,14 @@ ...@@ -189,14 +207,14 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Отправить обращение" android:text="@string/send_an_appeal"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="15sp" /> android:textSize="15sp" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="Ваше мнение имеет значение" android:text="@string/your_opinion_matters"
android:textSize="14sp" android:textSize="14sp"
android:textColor="@color/grey110" android:textColor="@color/grey110"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
...@@ -204,6 +222,9 @@ ...@@ -204,6 +222,9 @@
</LinearLayout> </LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout> </LinearLayout>
\ 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white100"
app:navigationIcon="@drawable/ic_baseline_arrow_back"
app:title="@string/tariffs" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white100"
app:tabIndicatorColor="@color/primary100"
app:tabMode="fixed"
app:tabSelectedTextColor="@color/primary100"
app:tabTextColor="@color/grey70" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
\ 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