Commit 785858b0 authored by shohboz's avatar shohboz

[UPD] MUS-195 Feature, updated change pin screen to one screen

parent bafee89e
......@@ -79,9 +79,7 @@ class MainActivity : AppCompatActivity() {
override fun onReceive(context: Context?, intent: Intent?) {
type = NetworkUtil.getConnectivityStatus(this@MainActivity)
bn.btnTryAgain.isVisible = type == 0
if(type != 0){
showMessage(getString(R.string.yes_internet_connect))
}else{
if(type == 0){
showMessage(getString(R.string.not_internet_connect))
}
}
......@@ -155,9 +153,6 @@ class MainActivity : AppCompatActivity() {
txtPublicOferta.setOnClickListener {
navigateUri("https://www.mobi.uz/")
}
txtConfidensialnost.setOnClickListener {
navigateUri("https://www.mobi.uz/")
}
}
}
......@@ -185,7 +180,6 @@ class MainActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
customLog("onResume: pref.isShowPin:${pref.isShowPin}")
if (pref.isShowPin) {
showPinCode()
} else {
......
......@@ -40,7 +40,7 @@ interface ApiService {
@POST("customer/check-reset-code")
suspend fun checkResetCode(
@Body req: UserAuth
): ResponseList<Any>
): Response
@POST("customer/reset-password")
suspend fun resetPassword(
......@@ -48,7 +48,7 @@ interface ApiService {
): ResponseObject<GenerateToken>
@POST("customer/log-out")
suspend fun logOut(): ResponseList<Any>
suspend fun logOut(): Response
@POST("customer/send-sms-code")
suspend fun reSendSms(
......@@ -58,12 +58,12 @@ interface ApiService {
@POST("customer/check-password")
suspend fun checkPassword(
@Body req: UserAuth
): ResponseObject<Any>
): Response
@POST("customer/change-password")
suspend fun installPassword(
@Body req: ChangePassword
): ResponseObject<Any>
): Response
@POST("service/index")
suspend fun getServices(): ResponseList<ServiceData>
......
......@@ -7,12 +7,12 @@ data class Customer(
data class CustomerData(
var info: CustomerInfo?,
var name: String,
val tarifi:TarifCodeName?
val tariff:TarifCodeName?
)
data class TarifCodeName(
var code: String,
var name: String
var name: Any
)
data class CustomerInfo(
......@@ -32,7 +32,11 @@ data class CustomerInfoCounters(
)
data class CodeValueUnit(
var base_value: Int?,
var code: String?,
var value: Int?,
var date_from: String?,
var date_to: String?,
var name: String?,
var unit: String?,
)
\ No newline at end of file
package com.mobiuz.app.dev.network.model
data class Response(
var status: Boolean,
var message: String,
var errors: List<Errors>,
)
\ No newline at end of file
......@@ -84,9 +84,7 @@ class AuthActivity : AppCompatActivity() {
override fun onReceive(context: Context?, intent: Intent?) {
type = NetworkUtil.getConnectivityStatus(this@AuthActivity)
bn.btnTryAgain.isVisible = type == 0
if(type != 0){
showMessage(getString(R.string.yes_internet_connect))
}else{
if(type == 0){
showMessage(getString(R.string.not_internet_connect))
}
}
......
package com.mobiuz.app.dev.ui.auth.pin
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.core.hardware.fingerprint.FingerprintManagerCompat
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.FragmentPinBinding
import com.mobiuz.app.dev.MainActivity
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.Utils
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
@AndroidEntryPoint
class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentPinBinding? = 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()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
pinCode = it.getString("pinCode", "") ?: ""
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentPinBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
loadData()
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
rvPin.adapter = pinAdapter
txtEnterPin.text = getString(R.string.confirm_pin)
txtNotPin.isVisible = false
pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated {
delay(50)
if (pinCode == it) {
pref.pinCode = pinCode
txtNotPin.isVisible = false
navigate()
} else {
cardPin.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
txtNotPin.isVisible = true
}
}
}
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
for (i in 0 until btnViewGroup.childCount) {
btnViewGroup.getChildAt(i).setOnClickListener {
if (it.id == R.id.btn_remove) {
pinAdapter.removeItem()
txtNotPin.isVisible = false
} else {
val text = it as TextView
pinAdapter.addItem(text.text.toString().toInt())
}
}
}
}
}
private fun navigate() {
pref.pinCode = pinCode
val manager = FingerprintManagerCompat.from(requireContext())
val isEnabled = manager.isHardwareDetected && manager.hasEnrolledFingerprints()
if (isEnabled) {
navController.navigate(R.id.biometricFragment, null, Utils.navOptions())
} else {
startActivity(Intent(requireContext(), MainActivity::class.java).putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST))
requireActivity().finish()
}
}
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()
}
}
package com.mobiuz.app.dev.ui.auth.pin
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.core.hardware.fingerprint.FingerprintManagerCompat
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
import co.infinum.goldfinger.Goldfinger
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentPinBinding
import com.mobiuz.app.dev.MainActivity
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.CONSTANTS
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.showMessage
import com.mobiuz.app.dev.utils.extensions.vibrate
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
......@@ -29,6 +41,19 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
private var type = ""
private var titleText = ""
private var pinCode = ""
private var count = 3
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
type = it.getString(CONSTANTS.TYPE_PIN, "") ?: ""
customLog("pin type = $type")
pinCode = it.getString(CONSTANTS.PIN_CODE, "") ?: ""
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
......@@ -49,22 +74,81 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
rvPin.setHasFixedSize(true)
rvPin.adapter = pinAdapter
titleText = when (type) {
CONSTANTS.NEW_PIN -> {
getString(R.string.install_pin)
}
CONSTANTS.CONFIRM_NEW_PIN -> {
getString(R.string.confirm_pin)
}
CONSTANTS.CURRENT_PIN -> {
getString(R.string.enter_old_pin)
}
CONSTANTS.CHANGE_NEW_PIN -> {
getString(R.string.enter_new_pin)
}
CONSTANTS.CONFIRM_CHANGE_NEW_PIN -> {
getString(R.string.confirm_new_pin)
}
else -> {
getString(R.string.install_pin)
}
}
txtEnterPin.text = getString(R.string.install_pin)
txtEnterPin.text = titleText
txtNotPin.isVisible = false
pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated {
customLog("done type: $type")
delay(50)
navController.navigate(R.id.confirmPinFragment, bundleOf("pinCode" to it), Utils.navOptions())
when (type) {
CONSTANTS.NEW_PIN -> {
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_NEW_PIN, CONSTANTS.PIN_CODE to it),
Utils
.navOptions())
}
CONSTANTS.CONFIRM_NEW_PIN -> {
if(pinCode == it){
pref.pinCode = pinCode
navigate()
}else{
vibrate(requireContext())
cardPin.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
txtNotPin.isVisible = true
}
}
CONSTANTS.CURRENT_PIN -> {
if(pref.pinCode == it){
navController.navigate(R.id.pinFragment, bundleOf( CONSTANTS.TYPE_PIN to CONSTANTS.CHANGE_NEW_PIN), Utils.navOptions())
}else{
loadError()
}
}
CONSTANTS.CHANGE_NEW_PIN -> {
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_CHANGE_NEW_PIN, CONSTANTS.PIN_CODE to it), Utils.navOptions())
}
CONSTANTS.CONFIRM_CHANGE_NEW_PIN -> {
if(pinCode == it){
pref.pinCode = pinCode
showMessage(getString(R.string.pin_code_updated))
navController.popBackStack(R.id.safetyFragment, false)
}else{
vibrate(requireContext())
cardPin.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
txtNotPin.isVisible = true
}
}
else -> {
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
}
}
}
for (i in 0 until btnViewGroup.childCount) {
btnViewGroup.getChildAt(i).setOnClickListener {
bn.txtNotPin.isVisible = false
if (it.id == R.id.btn_remove) {
pinAdapter.removeItem()
} else {
......@@ -77,6 +161,41 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
}
}
private fun loadError(){
bn.apply {
count--
if (count == 0){
showMessage(getString(R.string.popitok_error))
navigateToLogin()
}else{
vibrate(requireContext())
cardPin.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
showMessage(getString(R.string.popitok,count.toString()))
}
}
}
private fun navigateToLogin() {
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
intent.putExtra(CONSTANTS.PHONE, pref.userPhone)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finish()
}
private fun navigate() {
val golfing = Goldfinger.Builder(requireContext()).build()
if (golfing.canAuthenticate()) {
navController.navigate(R.id.biometricFragment, null, Utils.navOptions())
} else {
startActivity(Intent(requireContext(), MainActivity::class.java).putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST))
requireActivity().finish()
}
}
private fun loadData() {
data.clear()
for (i in 0..3) {
......
......@@ -188,7 +188,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
showProgressDialog(false)
showToastMessage(getString(R.string.password_successfully_updated))
navController.popBackStack(R.id.loginFragment,false)
navController.navigate(R.id.pinFragment, null, Utils.navOptions())
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.NEW_PIN), Utils.navOptions())
}
is UiStateObject.ERROR -> {
......
......@@ -218,7 +218,7 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
pref.userPhone = phone
navController.navigate(R.id.pinFragment, null, Utils.navOptions())
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.NEW_PIN), Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
......
......@@ -3,24 +3,14 @@ package com.mobiuz.app.dev.ui.global
object CONSTANTS {
const val LOGIN = "login"
const val BASE_URL = "http://10.160.45.60/api/v1/"
const val ROOM = "room"
const val RU = "ru"
const val UZ = "uz"
const val EN = "en"
const val PHONE = "phone"
const val PIN_CODE = "pin_code"
const val TYPE_AUTH = "type_auth"
const val TYPE_SETTINGS = "type_settings"
const val TYPE_SERVICE = "type_service"
const val SUPPORT = "support"
const val PROFILE = "profile"
const val SAFETY = "safety"
const val TARIFFS = "tariffs"
const val PACKETS = "packets"
const val PASSWORD = "password"
const val OLD_PASSWORD = "old_password"
const val LATEST_PASSWORD = "latest_password"
const val MINUTES = "minutes"
const val TYPE_VERIFICATION = "type_verification"
const val TYPE_FORGET = "type_forget"
const val FIRST = "first"
......@@ -41,6 +31,18 @@ object CONSTANTS {
const val RESEND_CODE_TIME = 10000L
const val BLOCKED_TIME = 6000
//pin types
const val PIN_CODE = "PIN_CODE"
const val TYPE_PIN = "TYPE_PIN"
const val NEW_PIN = "NEW_PIN"
const val CONFIRM_NEW_PIN = "CONFIRM_NEW_PIN"
const val CURRENT_PIN = "CURRENT_PIN"
const val CHANGE_NEW_PIN = "CHANGE_NEW_PIN"
const val CONFIRM_CHANGE_NEW_PIN = "CONFIRM_CHANGE_NEW_PIN"
const val LONGITUDE = 69.2602108116081
const val LATITUDE = 41.34823322480444
......
......@@ -150,7 +150,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
txtTypeSms.text = it?.ITEM?.unit ?: "sms"
}
mainViewModel.setUserName(customer?.customer?.name ?: "Unnamed User")
txtTarif.text = customer?.customer?.tarifi?.name ?: getString(R.string.my_tarif)
txtTarif.text = customer?.customer?.tariff?.name.toString() ?: getString(R.string.my_tarif)
txtMyNumber.text = pref.userPhone.customMasketHome().replace("-", " ")
toolbarMyNumber.text = pref.userPhone.customMasketHome().replace("-", " ")
}
......
......@@ -55,7 +55,7 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
})
btnChangePin.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
navController.navigate(R.id.oldPinFragment,null, Utils.navOptions())
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CURRENT_PIN), Utils.navOptions())
}
})
btnChangePassword.setOnClickListener(object : ButtonClick(){
......
......@@ -117,7 +117,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
imageCheck.isVisible = true
txtCheckConfirm.isVisible = true
}else{
loadError(false)
loadError()
btnLogin.isEnabled = s.toString().length > 3
imageCheck.isVisible = false
txtCheckConfirm.isVisible = false
......@@ -151,7 +151,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
CONSTANTS.NEW_PASSWORD -> {
navController.navigate(
R.id.currentPasswordFragment,
R.id.changePasswordFragment,
bundleOf(
CONSTANTS.TYPE_PASSWORD to CONSTANTS.CONFIRM_NEW_PASSWORD,
CONSTANTS.OLD_PASSWORD to oldPassword,
......@@ -180,18 +180,13 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
}
private fun loadError(status:Boolean){
private fun loadError(){
bn.apply {
if (count == 0){
errorTitle.text = getString(R.string.impossible_change_password)
errorText.text = getString(R.string.popitok_error_password)
showMessage( getString(R.string.popitok_error_password))
}else{
errorText.text = getString(R.string.popitok,count.toString())
showMessage(getString(R.string.popitok_password,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}
}
}
......@@ -201,21 +196,19 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
when (it) {
is UiStateObject.SUCCESS -> {
navController.navigate(
R.id.currentPasswordFragment,
R.id.changePasswordFragment,
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)
......@@ -224,9 +217,8 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
startActivity(intent)
requireActivity().finish()
}
}else{
loadError(true)
loadError()
}
}else{
showToastMessage(it.message)
......
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
package com.mobiuz.app.dev.ui.settings.safety.pin
import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.core.os.bundleOf
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.FragmentNewPinBinding
import com.mobiuz.app.databinding.FragmentOldPinBinding
import com.mobiuz.app.databinding.FragmentPinBinding
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.Utils
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
@AndroidEntryPoint
class NewPinFragment : BaseFragment(R.layout.fragment_new_pin) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentNewPinBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentNewPinBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
loadData()
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
rvPin.adapter = pinAdapter
txtNotPin.isVisible = false
pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated {
delay(50)
navController.navigate(R.id.confirmNewPinFragment, bundleOf("pinCode" to it), Utils.navOptions())
}
}
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
for (i in 0 until btnViewGroup.childCount) {
btnViewGroup.getChildAt(i).setOnClickListener {
when (it.id) {
R.id.btn_remove -> {
pinAdapter.removeItem()
}
R.id.btn_forget_pin -> {
}
else -> {
val text = it as TextView
pinAdapter.addItem(text.text.toString().toInt())
}
}
}
}
}
}
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
package com.mobiuz.app.dev.ui.settings.safety.pin
import android.content.Intent
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.FragmentOldPinBinding
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.auth.pin.PinAdapter
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.getColorCompat
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
@AndroidEntryPoint
class OldPinFragment : BaseFragment(R.layout.fragment_old_pin) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentOldPinBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
private var count = 3
private lateinit var decorView: View
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentOldPinBinding.bind(view)
count = 3
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
loadData()
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
rvPin.adapter = pinAdapter
pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated {
delay(50)
if (pref.pinCode == it) {
navController.navigate(R.id.newPinFragment, null, Utils.navOptions())
} else {
cardPin.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
count--
if(count == 0){
lifecycleScope.launchWhenCreated {
loadError(true)
delay(1000)
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
intent.putExtra(CONSTANTS.PHONE, pref.userPhone)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finish()
}
}else{
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 {
if (count == 0){
errorTitle.text = getString(R.string.impossible_change_pin)
errorText.text = getString(R.string.popitok_error)
}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}
}
}
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"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="-10"
android:toXDelta="10"
android:fromXDelta="-15"
android:toXDelta="15"
android:repeatCount="5"
android:repeatMode="reverse"
android:interpolator="@android:anim/linear_interpolator"
android:duration="70" />
android:duration="100" />
</set>
\ No newline at end of file
......@@ -163,7 +163,7 @@
android:layout_marginTop="@dimen/_10sdp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal"
android:paddingVertical="18dp"
android:paddingVertical="20dp"
android:paddingStart="30dp"
android:paddingEnd="10dp">
......@@ -200,12 +200,10 @@
android:id="@+id/txt_redact_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginHorizontal="32dp"
android:layout_marginTop="30dp"
android:background="?android:selectableItemBackground"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/redact_data"
android:text="@string/oferta_finans"
android:textColor="@color/link"
android:textSize="14sp" />
......@@ -213,28 +211,13 @@
android:id="@+id/txt_public_oferta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginHorizontal="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>
......
<?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/pin_not_same"
android:textSize="16sp"
android:textStyle="bold" />
</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/confirm_new_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
<?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
......@@ -4,11 +4,13 @@
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" />
......
......@@ -119,7 +119,7 @@
android:layout_marginTop="20dp"
android:background="?android:selectableItemBackground"
android:paddingHorizontal="@dimen/_16sdp"
android:paddingVertical="@dimen/_10sdp">
android:paddingVertical="16dp">
<TextView
android:layout_width="0dp"
......
......@@ -34,11 +34,6 @@
tools:layout="@layout/fragment_biometric" />
<fragment
android:id="@+id/confirmPinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.ConfirmPinFragment"
android:label="ConfirmPinFragment"
tools:layout="@layout/fragment_pin" />
<fragment
android:id="@+id/myVerificationFragment"
android:name="com.mobiuz.app.dev.ui.auth.verification.MyVerificationFragment"
android:label="MyVerificationFragment" />
......
......@@ -11,6 +11,11 @@
android:label="fragment_home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/pinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.PinFragment"
android:label="PinFragment"
tools:layout="@layout/fragment_pin" />
<fragment
android:id="@+id/languageFragment"
......@@ -33,23 +38,11 @@
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" />
<fragment
android:id="@+id/currentPasswordFragment"
android:id="@+id/changePasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.password.ChangePasswordFragment"
android:label="CurrentPasswordFragment" />
<fragment
android:id="@+id/oldPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.OldPinFragment"
android:label="OldPinFragment" />
<fragment
android:id="@+id/newPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.NewPinFragment"
android:label="NewPinFragment" />
<fragment
android:id="@+id/confirmNewPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.ConfirmNewPinFragment"
android:label="ConfirmNewPinFragment" />
<fragment
android:id="@+id/billingFragment"
android:name="com.mobiuz.app.BillingFragment"
android:label="fragment_billing"
......
......@@ -36,21 +36,14 @@
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" />
<fragment
android:id="@+id/currentPasswordFragment"
android:id="@+id/changePasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.password.ChangePasswordFragment"
android:label="CurrentPasswordFragment" />
<fragment
android:id="@+id/oldPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.OldPinFragment"
android:label="OldPinFragment" />
<fragment
android:id="@+id/newPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.NewPinFragment"
android:label="NewPinFragment" />
<fragment
android:id="@+id/confirmNewPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.ConfirmNewPinFragment"
android:label="ConfirmNewPinFragment" />
android:id="@+id/pinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.PinFragment"
android:label="PinFragment"
tools:layout="@layout/fragment_pin" />
</navigation>
\ No newline at end of file
......@@ -89,7 +89,7 @@
<string name="tx3">Политика конфиденциальности</string>
<string name="error_code">Неверный код</string>
<string name="redact_data"><u>Согласие на обработку данных</u></string>
<string name="public_oferta"><u>Публичная оферта</u></string>
<string name="public_oferta"><u>Оферта на обработку персональных данных</u></string>
<string name="txt_confidensialnost"><u>Политика конфиденциальности</u></string>
<string name="safety">Безопасность</string>
<string name="profile">Профиль</string>
......@@ -107,10 +107,9 @@
<string name="forget_pin">Забыли PIN?</string>
<string name="enter_new_pin">Введите новый PIN-код</string>
<string name="confirm_new_pin">Подтвердите PIN-код</string>
<string name="wrong_pin">Неверный PIN-код</string>
<string name="popitok">Осталось %1$s попытки</string>
<string name="impossible_change_pin">Смена ПИН кода невозможна</string>
<string name="popitok_error">Вы ввели неправильный PIN код 3 раза</string>
<string name="popitok">Неверный PIN-код \nОсталось %1$s попытки</string>
<string name="popitok_password">Неверный Пароль \nОсталось %1$s попытки</string>
<string name="popitok_error">Смена ПИН кода невозможна \nВы ввели неправильный PIN код 3 раза</string>
<string name="pin_code_updated">Пин-код успешно обновлен</string>
<string name="for_abonent">Для абонентов</string>
<string name="all_nomer">Со всех номеров</string>
......@@ -126,7 +125,7 @@
<string name="impossible_change_password">Замена пароля невозможна</string>
<string name="login_register">Авторизация/Регистрация</string>
<string name="close_process">Закрыть</string>
<string name="popitok_error_password">Вы ввели неправильный пароль 3 раза</string>
<string name="popitok_error_password">Замена пароля невозможна \nВы ввели неправильный пароль 3 раза</string>
<string name="settings_safety">Настройки безопасности действуют только для основного номера +998 97 999-99-99</string>
<string name="title_activity_offline">OfflineActivity</string>
<string name="title_home">Home</string>
......@@ -140,5 +139,6 @@
<string name="to_offline">Перейти в офлайн режим</string>
<string name="not_internet_connect">Отсутствует активное подключение</string>
<string name="yes_internet_connect">Интернет соединение восстановлено</string>
<string name="oferta_finans"><u>Оферта на предоставление \nфинансовых услуг</u></string>
</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