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
import com.mobiuz.app.dev.model.ServiceData
import com.mobiuz.app.dev.model.UserAuth
import com.mobiuz.app.dev.network.model.*
import retrofit2.http.Body
......@@ -45,4 +46,27 @@ interface ApiService {
suspend fun resetPassword(
@Body req: UserAuth
): 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
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.showCustomDialog
import com.mobiuz.app.dev.utils.hideKeyboard
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
......@@ -46,6 +47,12 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
override fun setUpUI() {
bn.apply {
viewGroup.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
}
})
inputPhone.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
......
......@@ -64,7 +64,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
lifecycleScope.launchWhenCreated {
delay(50)
if (pinCode == it) {
pref.pin_code = pinCode
pref.pinCode = pinCode
txtNotPin.isVisible = false
navigate()
} else {
......@@ -94,7 +94,7 @@ class ConfirmPinFragment : BaseFragment(R.layout.fragment_pin) {
}
private fun navigate() {
pref.pin_code = pinCode
pref.pinCode = pinCode
val manager = FingerprintManagerCompat.from(requireContext())
val isEnabled = manager.isHardwareDetected && manager.hasEnrolledFingerprints()
......
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"
......@@ -17,10 +18,24 @@ object CONSTANTS {
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"
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 LATITUDE = 41.34823322480444
......
package com.mobiuz.app.dev.ui.service
import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
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) {
override fun getItemCount() = list.size
class FragmentPagerAdapter(fragment: Fragment, private val service: ServiceData): FragmentStateAdapter(fragment) {
override fun getItemCount() = service.data.size
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
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
......@@ -8,9 +10,10 @@ import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivitySettingsBinding
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.FullScreenDialog
import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.Utils
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
......@@ -30,28 +33,28 @@ class SettingsActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
_bn = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(bn.root)
window.statusBarColor = Color.WHITE
val window = window.decorView
window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
val fragment = supportFragmentManager.findFragmentById(R.id.settings_container) as NavHostFragment
navController = NavHostFragment.findNavController(fragment)
intent?.let {
val type = it.getStringExtra(CONSTANTS.TYPE_SETTINGS)
when (type) {
when (it.getStringExtra(CONSTANTS.TYPE_SETTINGS)) {
CONSTANTS.PROFILE -> {
navController.popBackStack()
navController.navigate(R.id.profileFragment, null, Utils.navOptions())
navController.navigate(R.id.profileFragment)
}
CONSTANTS.SUPPORT -> {
navController.popBackStack()
navController.navigate(R.id.supportFragment, null, Utils.navOptions())
navController.navigate(R.id.supportFragment)
}
CONSTANTS.SAFETY -> {
navController.popBackStack()
navController.navigate(R.id.safetyFragment, null, Utils.navOptions())
navController.navigate(R.id.safetyFragment)
}
else -> Unit
......@@ -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() {
pref.isShowPin = false
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
......@@ -3,14 +3,16 @@ package com.mobiuz.app.dev.ui.settings.safety
import android.os.Bundle
import android.view.View
import android.widget.SeekBar
import androidx.core.os.bundleOf
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.airbnb.lottie.utils.Utils
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentSafetyBinding
import com.mobiuz.app.dev.model.SharedPref
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.utils.Utils
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
......@@ -36,8 +38,11 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
override fun setUpUI() {
bn.apply {
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.setOnCheckedChangeListener { _, isChecked ->
val message = if(isChecked) "Biometric enabled" else "Biometric disabled"
......@@ -50,11 +55,12 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
})
btnChangePin.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
navController.navigate(R.id.oldPinFragment,null, Utils.navOptions())
}
})
btnChangePassword.setOnClickListener(object : ButtonClick(){
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(){
......
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 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true">
android:fitsSystemWindows="false">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/settings_container"
......
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:fitsSystemWindows="true"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:id="@+id/rv_ussd_command"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:layout_marginHorizontal="12dp"
tools:listitem="@layout/item_ussd"
android:layout_height="match_parent"/>
android:layoutAnimation="@anim/layout_animation"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_ussd" />
</LinearLayout>
\ No newline at end of file
......@@ -3,28 +3,70 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/view_group"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
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
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"
/>
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
style="@style/TitleTextStyle"
android:id="@+id/txt_password"
android:layout_marginHorizontal="@dimen/_12sdp"
style="@style/TitleTextStyle"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/enter_confirm_new_password"
app:layout_constraintStart_toStartOf="parent"
android:text="@string/enter_current_password"
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
......@@ -33,8 +75,8 @@
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:text="@string/enter_password"
android:textSize="15sp"
android:textColor="@color/black75"
android:textSize="15sp"
app:layout_constraintStart_toStartOf="@id/layout_input_password"
app:layout_constraintTop_toBottomOf="@id/txt_password" />
......@@ -56,9 +98,9 @@
android:imeOptions="actionDone"
android:inputType="numberPassword"
android:maxLength="7"
android:textSize="@dimen/_12sdp"
android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp"
android:textSize="@dimen/_12sdp"
tools:ignore="RtlSymmetry" />
</com.google.android.material.textfield.TextInputLayout>
......@@ -86,19 +128,19 @@
app:layout_constraintStart_toEndOf="@id/image_check"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
<TextView
android:id="@+id/txt_forget_password"
android:layout_width="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:textSize="16sp"
android:text="@string/forget_password"
android:background="?android:selectableItemBackground"
android:textColor="@color/grey110"
android:textSize="16sp"
android:textStyle="bold"
android:layout_marginTop="@dimen/_16sdp"
android:layout_marginEnd="@dimen/_10sdp"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
......@@ -106,14 +148,14 @@
<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:enabled="false"
android:text="@string/enter"
app:layout_constraintTop_toBottomOf="@id/layout_input_password"
app:layout_constraintBottom_toBottomOf="parent" />
android:textSize="@dimen/_12sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -4,6 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/view_group"
android:orientation="vertical">
<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
This diff is collapsed.
......@@ -161,10 +161,11 @@
<TextView
android:id="@+id/sent_code_again"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:gravity="center"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginHorizontal="@dimen/_16sdp"
android:background="?selectableItemBackground"
android:padding="@dimen/_10sdp"
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 @@
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
android:layout_weight="0.8">
<TextView
android:id="@+id/txt_not_pin"
......
......@@ -3,6 +3,7 @@
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:orientation="vertical">
......@@ -10,18 +11,21 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="34dp"
app:navigationIcon="@drawable/ic_baseline_arrow_back"
app:title="@string/safety" />
<TextView
android:layout_width="wrap_content"
android:background="@color/grey20"
android:layout_marginTop="40dp"
android:paddingHorizontal="16dp"
android:layout_marginTop="20dp"
android:paddingHorizontal="24dp"
android:id="@+id/txt_phone_safety"
android:paddingVertical="12dp"
android:textColor="@color/black80"
android:gravity="center"
android:layout_marginHorizontal="12dp"
android:text="Настройки безопасности действуют только для основного номера +998 97 999-99-99"
android:text="@string/settings_safety"
android:layout_height="wrap_content"/>
<LinearLayout
......
......@@ -10,10 +10,19 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
app:title="@string/support"
android:layout_marginTop="24dp"
android:layout_height="wrap_content"
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
android:id="@+id/btn_0890"
android:layout_width="match_parent"
......@@ -26,6 +35,7 @@
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/phone"
android:layout_gravity="center"
android:src="@drawable/ic_vector_phone" />
......@@ -37,14 +47,15 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0890"
tools:text="0890"
android:id="@+id/txt_phone1"
android:textStyle="bold"
android:textColor="@color/black100"
android:textSize="15sp" />
<TextView
android:layout_width="wrap_content"
android:text="Для абонентов"
android:text="@string/for_abonent"
android:textSize="14sp"
android:textColor="@color/grey110"
android:layout_height="wrap_content" />
......@@ -65,6 +76,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/phone"
android:src="@drawable/ic_vector_phone" />
<LinearLayout
......@@ -75,14 +87,15 @@
<TextView
android:layout_width="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:id="@+id/txt_phone2"
android:textColor="@color/black100"
android:textSize="15sp" />
<TextView
android:layout_width="wrap_content"
android:text="Со всех номеров"
android:text="@string/all_nomer"
android:textSize="14sp"
android:textColor="@color/grey110"
android:layout_height="wrap_content" />
......@@ -103,6 +116,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/phone"
android:src="@drawable/ic_vector_phone" />
<LinearLayout
......@@ -113,14 +127,15 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+99897 203 10 10"
tools:text="+998 97 203 10 10"
android:textStyle="bold"
android:id="@+id/txt_phone3"
android:textColor="@color/black100"
android:textSize="15sp" />
<TextView
android:layout_width="wrap_content"
android:text="Связь с нами"
android:text="@string/contact_us"
android:textSize="14sp"
android:textColor="@color/grey110"
android:layout_height="wrap_content" />
......@@ -141,6 +156,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/telegram_bot"
android:src="@drawable/ic_vector_telegram" />
<LinearLayout
......@@ -151,14 +167,15 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="MobiuzHelpBot "
tools:text="MobiuzHelpBot"
android:textStyle="bold"
android:id="@+id/txt_help_bot"
android:textColor="@color/black100"
android:textSize="15sp" />
<TextView
android:layout_width="wrap_content"
android:text="Телеграмм бот"
android:text="@string/telegram_bot"
android:textSize="14sp"
android:textColor="@color/grey110"
android:layout_height="wrap_content" />
......@@ -179,6 +196,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/email"
android:src="@drawable/ic_group_message" />
<LinearLayout
......@@ -189,14 +207,14 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Отправить обращение"
android:text="@string/send_an_appeal"
android:textStyle="bold"
android:textColor="@color/black100"
android:textSize="15sp" />
<TextView
android:layout_width="wrap_content"
android:text="Ваше мнение имеет значение"
android:text="@string/your_opinion_matters"
android:textSize="14sp"
android:textColor="@color/grey110"
android:layout_height="wrap_content" />
......@@ -204,6 +222,9 @@
</LinearLayout>
</LinearLayout>
</ScrollView>
</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