Commit 22e7c154 authored by shohboz's avatar shohboz

[UPD] MUS-244 Feature, updated localizations and fixed some bugs

parent 4edadbeb
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="FUQOZ9OVZLWKVKZT" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2021-12-21T15:08:49.610759Z" />
</component>
</project>
\ No newline at end of file
......@@ -34,6 +34,7 @@
<entry key="app/src/main/res/drawable/ic_finger_print.xml" value="0.2590277777777778" />
<entry key="app/src/main/res/drawable/ic_fingerprint.xml" value="0.26525096525096525" />
<entry key="app/src/main/res/drawable/ic_group_12.xml" value="0.2796296296296296" />
<entry key="app/src/main/res/drawable/ic_image_only_finger.xml" value="0.26525096525096525" />
<entry key="app/src/main/res/drawable/ic_mobiuz_logo.xml" value="0.26180555555555557" />
<entry key="app/src/main/res/drawable/ic_pinger_print.xml" value="0.2590277777777778" />
<entry key="app/src/main/res/drawable/ic_russia.xml" value="0.2796296296296296" />
......@@ -89,6 +90,7 @@
<entry key="app/src/main/res/layout/fragment_service.xml" value="0.25625" />
<entry key="app/src/main/res/layout/fragment_support.xml" value="0.25625" />
<entry key="app/src/main/res/layout/fragment_tarifs.xml" value="0.25625" />
<entry key="app/src/main/res/layout/fragment_ussd.xml" value="0.25625" />
<entry key="app/src/main/res/layout/fragment_verification.xml" value="0.2" />
<entry key="app/src/main/res/layout/home_home.xml" value="0.25625" />
<entry key="app/src/main/res/layout/home_motion.xml" value="0.10951008645533142" />
......
......@@ -8,6 +8,9 @@
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:name=".dev.app.App"
......
......@@ -10,6 +10,7 @@ import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.global.CONSTANTS
import dagger.hilt.android.AndroidEntryPoint
import uz.agr.mobiuz.AGRBilling
import javax.inject.Inject
@AndroidEntryPoint
......@@ -42,6 +43,7 @@ class LanguageActivity : AppCompatActivity() {
private fun setLangAndNavigate(lang: String) {
pref.language = lang
AGRBilling.setLanguage(this, lang)
startActivity(Intent(this, AuthActivity::class.java))
}
......
......@@ -200,7 +200,7 @@ class MainActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
if (pref.isShowPin) {
if (pref.isShowPin && !pref.isOpenUssdBottomSheetDialog) {
showPinCode()
} else {
pref.blockedTime = System.currentTimeMillis()
......@@ -210,7 +210,8 @@ class MainActivity : AppCompatActivity() {
private fun showPinCode() {
if(pref.blockedTime < System.currentTimeMillis() - CONSTANTS.BLOCKED_TIME){
if (currentNavController?.value?.currentDestination?.id != R.id.fullScreenFragment){
if (currentNavController?.value?.currentDestination?.id != R.id.fullScreenFragment &&
currentNavController?.value?.currentDestination?.id != R.id.ussdFragment){
bn.btnTryAgain.isVisible = false
currentNavController?.value?.navigate(R.id.fullScreenFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.TYPE_AFTER))
}
......
package com.mobiuz.app.dev
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.mobiuz.app.dev.model.UserAuth
import com.mobiuz.app.dev.network.model.ChangePassword
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.network.repository.MainRepository
import com.mobiuz.app.dev.utils.extensions.customLog
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
......@@ -45,7 +41,7 @@ class MainViewModel @Inject constructor(
private val _bottomSheetUiState = MutableStateFlow<UiStateObject<Boolean>>(UiStateObject.EMPTY)
val bottomSheetUiState: StateFlow<UiStateObject<Boolean>> = _bottomSheetUiState
fun bottomSheet(status:Boolean) = viewModelScope.launch {
fun bottomSheet(status: Boolean) = viewModelScope.launch {
_bottomSheetUiState.value = UiStateObject.EMPTY
_bottomSheetUiState.value = UiStateObject.SUCCESS(status)
}
......@@ -53,8 +49,7 @@ class MainViewModel @Inject constructor(
private val _swipeDrawerUiState = MutableStateFlow<UiStateObject<Boolean>>(UiStateObject.EMPTY)
val swipeDrawerUiState: StateFlow<UiStateObject<Boolean>> = _swipeDrawerUiState
fun swipeDrawer(status:Boolean) = viewModelScope.launch {
Log.e("AAA","swipeDrawer:$status")
fun swipeDrawer(status: Boolean) = viewModelScope.launch {
_swipeDrawerUiState.value = UiStateObject.EMPTY
_swipeDrawerUiState.value = UiStateObject.SUCCESS(status)
}
......@@ -62,6 +57,4 @@ class MainViewModel @Inject constructor(
suspend fun logOut() = repository.logOut()
}
\ No newline at end of file
......@@ -17,7 +17,9 @@ 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.service.ServiceAdapter
import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.NetworkUtil
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
......@@ -31,6 +33,7 @@ class OfflineActivity : AppCompatActivity() {
private lateinit var adapter: ServiceAdapter
private lateinit var navController: NavController
private lateinit var receiver: BroadcastReceiver
private val intentFilter = IntentFilter()
// if offline type == 0
private var type = 0
......@@ -39,6 +42,7 @@ class OfflineActivity : AppCompatActivity() {
lateinit var pref: SharedPref
override fun onCreate(savedInstanceState: Bundle?) {
LocaleHelper.setLocale(this)
super.onCreate(savedInstanceState)
_bn = ActivityOfflineBinding.inflate(layoutInflater)
setContentView(bn.root)
......@@ -48,6 +52,7 @@ class OfflineActivity : AppCompatActivity() {
val fragment = supportFragmentManager.findFragmentById(R.id.offline_container) as NavHostFragment
navController = NavHostFragment.findNavController(fragment)
// if(intent )
intent?.let {
val type = it.getStringExtra(CONSTANTS.TYPE_SERVICE)
......@@ -64,6 +69,10 @@ class OfflineActivity : AppCompatActivity() {
receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == CONSTANTS.USSD_ACTION_REFRESH) {
pref.blockedTime = System.currentTimeMillis()
customLog("USSD_ACTION_REFRESH")
}
if (intent?.action == CONSTANTS.CONNECTIVITY_CHANGE) {
sendBroadcast(Intent(CONSTANTS.MY_CONNECTIVITY_CHANGE))
}
......@@ -77,9 +86,10 @@ class OfflineActivity : AppCompatActivity() {
}
}
val intentFilter = IntentFilter()
intentFilter.addAction(CONSTANTS.CONNECTIVITY_CHANGE)
intentFilter.addAction(CONSTANTS.MY_CONNECTIVITY_CHANGE)
intentFilter.addAction(CONSTANTS.USSD_ACTION_REFRESH)
registerReceiver(receiver, intentFilter)
bn.btnTryAgain.setOnClickListener {
......@@ -108,7 +118,9 @@ class OfflineActivity : AppCompatActivity() {
private fun showPinCode() {
if (pref.blockedTime < System.currentTimeMillis() - CONSTANTS.BLOCKED_TIME) {
if (navController.currentDestination?.id != R.id.fullScreenFragment) {
if (navController.currentDestination?.id != R.id.fullScreenFragment &&
navController.currentDestination?.id != R.id.ussdFragment) {
customLog("fullScreenFragment")
bn.btnTryAgain.isVisible = false
navController.navigate(R.id.fullScreenFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.TYPE_AFTER))
}
......
......@@ -2,6 +2,7 @@ package com.mobiuz.app.dev.model
import android.content.Context
import android.content.SharedPreferences
import com.mobiuz.app.dev.ui.global.CONSTANTS
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
......@@ -27,7 +28,7 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
}
var language: String
get() = mySharedPref.getString(::language.name, "") ?: ""
get() = mySharedPref.getString(::language.name,"") ?: ""
set(value) {
mySharedPref.edit().putString(::language.name, value).apply()
}
......@@ -80,6 +81,12 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
mySharedPref.edit().putBoolean(::isShowPin.name, value).apply()
}
var isOpenUssdBottomSheetDialog: Boolean
get() = mySharedPref.getBoolean(::isOpenUssdBottomSheetDialog.name, true)
set(value) {
mySharedPref.edit().putBoolean(::isOpenUssdBottomSheetDialog.name, value).apply()
}
var blockedTime: Long
get() = mySharedPref.getLong(::blockedTime.name, 0)
set(value) {
......
......@@ -156,8 +156,8 @@ class AuthRepository @Inject constructor(
res.status -> {
UiStateObject.SUCCESS(res.message)
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage(),true)
else -> UiStateObject.ERROR(res.message,true)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
......
......@@ -21,6 +21,7 @@ import com.mobiuz.app.dev.MainActivity
import com.mobiuz.app.dev.OfflineActivity
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.NetworkUtil
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.showMessage
......@@ -43,6 +44,7 @@ class AuthActivity : AppCompatActivity() {
private var phone = ""
override fun onCreate(savedInstanceState: Bundle?) {
LocaleHelper.setLocale(this)
super.onCreate(savedInstanceState)
_bn = ActivityAuthBinding.inflate(layoutInflater)
setContentView(bn.root)
......
......@@ -75,7 +75,7 @@ class BiometricFragment : BaseFragment(R.layout.fragment_biometric) {
intent.putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finish()
requireActivity().finishAffinity()
}
override fun collects() {}
......
......@@ -47,7 +47,6 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
super.onCreate(savedInstanceState)
arguments?.let {
type = it.getString(CONSTANTS.TYPE_PIN, "") ?: ""
customLog("pin type = $type")
pinCode = it.getString(CONSTANTS.PIN_CODE, "") ?: ""
}
}
......@@ -65,7 +64,15 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
bn.apply {
loadData()
toolbar.setNavigationOnClickListener {
navController.navigateUp()
when {
navController.popBackStack(R.id.registerFragment,false) -> {
}
navController.popBackStack(R.id.loginFragment,false) -> {
}
else -> navController.navigateUp()
}
}
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
......@@ -79,12 +86,15 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
getString(R.string.confirm_pin)
}
CONSTANTS.CURRENT_PIN -> {
topDiv.isVisible = true
getString(R.string.enter_old_pin)
}
CONSTANTS.CHANGE_NEW_PIN -> {
topDiv.isVisible = true
getString(R.string.enter_new_pin)
}
CONSTANTS.CONFIRM_CHANGE_NEW_PIN -> {
topDiv.isVisible = true
getString(R.string.confirm_new_pin)
}
else -> {
......@@ -164,8 +174,10 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
bn.apply {
count--
if (count == 0){
showMessage(getString(R.string.popitok_error))
navigateToLogin()
showCustomDialog(getString(R.string.popitok_error),false){
navigateToLogin()
}
}else{
vibrate(requireContext())
cardPin.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
......@@ -180,7 +192,7 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finish()
requireActivity().finishAffinity()
}
private fun navigate() {
......@@ -188,8 +200,11 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
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()
val intent = Intent(requireContext(), MainActivity::class.java)
intent.putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finishAffinity()
}
}
......
......@@ -39,6 +39,7 @@ object CONSTANTS {
const val FULL_SCREEN_DIALOG = "full_screen_dialog"
const val CONNECTIVITY_CHANGE = "android.net.conn.CONNECTIVITY_CHANGE"
const val MY_CONNECTIVITY_CHANGE = "MY_CONNECTIVITY_CHANGE"
const val USSD_ACTION_REFRESH = "com.times.ussd.action.REFRESH"
//password types
......
......@@ -6,10 +6,13 @@ import android.view.View
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.biometric.BiometricManager
import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_STRONG
import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_WEAK
import androidx.biometric.BiometricPrompt
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
......@@ -22,15 +25,12 @@ 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.utils.extensions.SingleBlock
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.NetworkUtil
import com.mobiuz.app.dev.utils.extensions.showCustomDialog
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
import android.widget.LinearLayout
@AndroidEntryPoint
......@@ -45,6 +45,10 @@ class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
private lateinit var mainViewModel: MainViewModel
private var type = ""
private var errorCount = 3
private lateinit var goldfinger: Goldfinger
private lateinit var biometricManager: BiometricManager
private lateinit var biometricPrompt: BiometricPrompt
private lateinit var promptInfo: BiometricPrompt.PromptInfo
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
......@@ -59,24 +63,64 @@ class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
val window = requireActivity().window.decorView
window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
mainViewModel.bottomSheet(false)
mainViewModel.swipeDrawer(false)
setUpUI()
if (pref.isUseFingerPrint) loadFingerPrint()
goldfinger = Goldfinger.Builder(requireContext()).build()
biometricManager = BiometricManager.from(requireContext())
checkBiometric()
}
private fun checkBiometric() {
when (biometricManager.canAuthenticate(BIOMETRIC_STRONG or BIOMETRIC_WEAK)) {
BiometricManager.BIOMETRIC_SUCCESS -> {
bn.btnFingerPrint.isVisible = true
if (pref.isUseFingerPrint) loadBiometric()
}
BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
bn.btnFingerPrint.isVisible = false
}
BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> {
bn.btnFingerPrint.isVisible = false
}
else -> Unit
}
}
private fun loadBiometric() {
biometricPrompt = BiometricPrompt(this, object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
navigate()
}
})
promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle(getString(R.string.biometric_enter))
.setSubtitle(getString(R.string.subtitle_biometric))
.setConfirmationRequired(true)
.setNegativeButtonText(getString(R.string.cancel))
.build()
biometricPrompt.authenticate(promptInfo)
}
private fun loadFingerPrint() {
val golfing = Goldfinger.Builder(requireContext()).build()
if (golfing.canAuthenticate()) {
if (goldfinger.canAuthenticate()) {
val params = Goldfinger.PromptParams.Builder(this)
.title(getString(R.string.enter_from_finger_or_face))
.title(getString(R.string.biometric_enter))
.description(getString(R.string.enter_from_finger_or_face))
.negativeButtonText(getString(R.string.cancel))
.build()
golfing.authenticate(params, object : Goldfinger.Callback {
goldfinger.authenticate(params, object : Goldfinger.Callback {
override fun onResult(result: Goldfinger.Result) {
if (result.type() == Goldfinger.Type.SUCCESS) {
navigate()
......@@ -93,23 +137,12 @@ class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
bn.apply {
loadData()
val param1 = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
)
val param2 = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
)
param2.weight = 3f
// frame.layoutParams = param1
// btnViewGroup.layoutParams = param2
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.adapter = pinAdapter
txtNotPin.isVisible = false
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner,object : OnBackPressedCallback(true){
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
requireActivity().finish()
}
......@@ -121,8 +154,10 @@ class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
navigate()
} else {
errorCount--
if (errorCount == 0){
loadWithPassword()
if (errorCount == 0) {
showCustomDialog(getString(R.string.pin_code_error3), false) {
loadWithPassword()
}
}
vibrate(requireContext())
cardPin.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake))
......@@ -142,7 +177,7 @@ class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
loadWithPassword()
}
R.id.btn_finger_print -> {
loadFingerPrint()
loadBiometric()
}
else -> {
val text = it as TextView
......@@ -152,22 +187,27 @@ class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
}
}
}
}
}
private fun loadWithPassword() {
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
startActivity(intent)
requireActivity().finish()
val isOffline = NetworkUtil.getConnectivityStatus(requireContext())
if (isOffline != 0){
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
startActivity(intent)
requireActivity().finish()
}else{
showMessage(getString(R.string.check_internet_and_try_again))
}
}
private fun navigate() {
navController.popBackStack()
requireActivity().sendBroadcast(Intent(CONSTANTS.MY_CONNECTIVITY_CHANGE))
if(type == CONSTANTS.OFFLINE){
if (type == CONSTANTS.OFFLINE) {
navController.navigate(R.id.serviceFragment, bundleOf(CONSTANTS.TYPE_SERVICE to CONSTANTS.OFFLINE))
} else if (type != CONSTANTS.TYPE_AFTER) {
navController.navigate(R.id.homeFragment)
......
......@@ -79,16 +79,23 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
TabLayoutMediator(tabIndicator, slider) { _, _ -> }.attach()
jobAutoSlide = viewLifecycleOwner.lifecycleScope.launchWhenStarted {
while (isActive) {
delay(4000)
if (slider.currentItem != tabIndicator.tabCount - 1) {
slider.currentItem = slider.currentItem + 1
} else {
slider.currentItem = 0
}
}
}
// lifecycleScope.launchWhenCreated {
// repeat(10000000){
// delay(4000)
// if (slider.currentItem != tabIndicator.tabCount - 1) {
// slider.currentItem = slider.currentItem + 1
// } else {
// slider.currentItem = 0
// }
// }
// }
// jobAutoSlide = viewLifecycleOwner.lifecycleScope.launchWhenStarted {
// while (isActive) {
//
// }
// }
slider.offscreenPageLimit = 3
slider.getChildAt(0).overScrollMode = RecyclerView.OVER_SCROLL_NEVER
......@@ -106,7 +113,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
mainViewModel.openDrawer(System.currentTimeMillis())
}
val params0 = FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
val params0 = FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
val params = FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
bounceScrollView.setOnOverScrollListener { fromStart, overScrolledDistance ->
......
package com.mobiuz.app.dev.ui.home
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ItemHomeBinding
class SliderAdapter : RecyclerView.Adapter<SliderAdapter.SliderViewHolder>() {
......@@ -17,14 +20,20 @@ class SliderAdapter : RecyclerView.Adapter<SliderAdapter.SliderViewHolder>() {
)
}
override fun onBindViewHolder(holder: SliderViewHolder, position: Int) = holder.onBind()
override fun onBindViewHolder(holder: SliderViewHolder, position: Int) = holder.onBind(position)
override fun getItemCount(): Int = 4
inner class SliderViewHolder(val view: ItemHomeBinding) : RecyclerView.ViewHolder(view.root) {
fun onBind() {
fun onBind(position: Int) {
view.apply {
if(position % 2 != 0){
imageSlider.setBackgroundResource(R.drawable.image_slider2)
txtDescription.setTextColor(Color.WHITE)
txtDescription.text = itemView.context.getString(R.string.misic_all_with_you)
}
}
}
}
......
package com.mobiuz.app.dev.ui.service
import android.Manifest
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.telephony.PhoneStateListener
import android.telephony.TelephonyManager
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
......@@ -15,7 +19,9 @@ import com.mobiuz.app.dev.model.UssdData
import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.utils.extensions.getCurrentName
import com.mobiuz.app.dev.utils.extensions.checkPermission
import com.mobiuz.app.dev.utils.extensions.customLog
import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
@AndroidEntryPoint
......@@ -34,6 +40,7 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
pref.isOpenUssdBottomSheetDialog = true
setUpUI()
}
......@@ -52,12 +59,18 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
pref.isShowPin = false
checkPermission(Manifest.permission.CALL_PHONE) {
try {
pref.blockedTime = System.currentTimeMillis()
pref.isShowPin = false
val ussd = data.code.replace("#", "") + Uri.encode("#")
startActivity(Intent(Intent.ACTION_CALL, Uri.parse("tel:$ussd")))
val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:$ussd"))
startActivityForResult(intent,1)
val manager = requireContext().getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
manager.listen(MyCallListener(pref),PhoneStateListener.LISTEN_CALL_STATE)
} catch (e: Exception) {
pref.isShowPin = false
}
pref.isOpenUssdBottomSheetDialog = false
dismiss()
}
}
......@@ -65,9 +78,25 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
pref.blockedTime = System.currentTimeMillis()
customLog("requestCode:$requestCode, resultCode:$resultCode, data:$data ")
}
override fun onDestroy() {
super.onDestroy()
_bn = null
}
}
\ No newline at end of file
}
class MyCallListener(val pref: SharedPref): PhoneStateListener(){
override fun onCallStateChanged(state: Int, phoneNumber: String?) {
super.onCallStateChanged(state, phoneNumber)
pref.isShowPin = false
pref.blockedTime = System.currentTimeMillis()
Log.e("AAA", "RINGING, number: ")
}
}
......@@ -17,6 +17,7 @@ import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.extensions.SingleBlock
import dagger.hilt.android.AndroidEntryPoint
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import uz.agr.mobiuz.AGRBilling
import javax.inject.Inject
......@@ -72,6 +73,7 @@ class LanguageFragment : BaseFragment(R.layout.fragment_language) {
private fun setLangAndNavigate(lang: String) {
pref.language = lang
AGRBilling.changeLanguage(requireContext(),lang)
LocaleHelper.setLocale(requireContext())
val intent = Intent(requireContext(), MainActivity::class.java)
intent.putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST)
......
......@@ -183,7 +183,9 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
private fun loadError(){
bn.apply {
if (count == 0){
showMessage( getString(R.string.popitok_error_password))
showCustomDialog(getString(R.string.popitok_error_password),false){
}
}else{
showMessage(getString(R.string.popitok_password,count.toString()))
}
......@@ -206,7 +208,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
showProgressDialog(false)
}
is UiStateObject.ERROR -> {
if(it.message == "Invalid password"){
if(it.fromServer){
count--
if(count == 0){
showCustomDialog(getString(R.string.popitok_error_password), false){
......
......@@ -4,11 +4,13 @@ import android.annotation.TargetApi
import android.content.Context
import android.os.Build
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.global.CONSTANTS
import java.util.*
object LocaleHelper {
fun setLocale(context: Context):Context {
return language(context, SharedPref(context).language)
val lang = SharedPref(context).language
return language(context,if (lang.isNotEmpty()) lang else CONSTANTS.RU )
}
private fun language(context: Context, language: String):Context{
......
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="45dp"
android:viewportWidth="50"
android:viewportHeight="55">
<path
android:pathData="M23.0276,0.0616C17.8956,0.3869 12.7318,1.9252 8.3149,4.4446C7.0558,5.1627 6.9921,5.2191 6.8822,5.7101C6.7806,6.1645 6.9581,6.6558 7.3149,6.9079C7.773,7.2313 8.2097,7.1279 9.5374,6.3819C13.0902,4.3855 17.1266,3.098 21.535,2.5549C23.1694,2.3534 27.34,2.3803 28.9447,2.6025C32.8488,3.143 35.5941,3.9625 38.9993,5.6043C40.7555,6.4511 40.7996,6.4657 41.2165,6.3398C41.8929,6.1355 42.2439,5.3782 41.9342,4.7918C41.7563,4.4549 41.6013,4.3487 40.3524,3.7073C35.0797,0.9994 28.8648,-0.3085 23.0276,0.0616ZM21.8549,7.0325C12.6033,7.9656 4.66,12.5571 0.5705,19.3358C-0.0386,20.3455 -0.0637,20.4207 0.0585,20.8674C0.2012,21.3879 0.5923,21.7219 1.0592,21.7219C1.592,21.7219 1.9278,21.466 2.3816,20.7141C4.0087,18.0179 6.1761,15.7778 9.0079,13.8657C18.2453,7.6286 31.7547,7.6286 40.9921,13.8657C43.8444,15.7917 45.9589,17.9774 47.6025,20.6989C48.1129,21.544 48.3791,21.7483 48.9492,21.7319C49.4082,21.7188 49.8022,21.3755 49.9415,20.8674C50.0637,20.4207 50.0386,20.3455 49.4295,19.3358C45.7273,13.1993 38.7668,8.7816 30.5463,7.351C27.8568,6.883 24.5409,6.7615 21.8549,7.0325ZM23.1343,13.8067C22.9583,13.8306 22.3347,13.9041 21.7483,13.9702C12.1414,15.0524 4.6268,21.6635 2.7761,30.6612C2.2112,33.4075 2.1426,36.6153 2.6009,38.853C3.0648,41.1183 4.4392,45.0647 4.9209,45.5147C5.6069,46.1557 6.769,45.6706 6.769,44.743C6.769,44.5452 6.583,43.911 6.3555,43.3334C5.7498,41.7953 5.112,39.7547 4.8347,38.4676C4.6305,37.5198 4.5923,37.0294 4.5964,35.4044C4.6015,33.3395 4.7015,32.4305 5.1254,30.5948C6.7587,23.521 12.1813,18.2817 19.5622,16.646C22.1053,16.0822 25.7942,15.9151 28.0404,16.2617C32.7602,16.99 36.4582,18.8291 39.6098,22.0158C42.7065,25.1468 44.5978,29.0493 45.2648,33.6847C45.3329,34.1576 45.3949,35.27 45.4026,36.1568C45.414,37.4759 45.3803,37.8765 45.2171,38.3602C44.3147,41.035 41.6345,42.7581 39.0293,42.3385C37.5868,42.1062 36.6046,41.5762 35.6109,40.4942C34.5627,39.3529 34.2295,38.4298 34.0646,36.2105C33.8722,33.6197 33.1666,31.8191 31.7383,30.274C28.7263,27.0156 22.9966,26.5757 19.312,29.3198C18.062,30.2508 17.0085,31.7358 16.462,33.3376C16.0147,34.6485 15.9029,35.5925 15.9687,37.5003C16.0648,40.2785 16.5949,42.3496 17.8569,44.8764C19.3191,47.804 21.5009,50.3311 24.5194,52.5928C25.906,53.632 28.019,54.914 28.4651,54.987C29.1004,55.0909 29.691,54.5581 29.691,53.8809C29.691,53.3354 29.409,53.0421 28.1591,52.2881C21.8259,48.4673 18.4911,43.4748 18.2091,37.3923C18.0586,34.1435 19.233,31.8035 21.6008,30.6348C22.8534,30.0165 23.5481,29.8577 25,29.8577C26.4519,29.8577 27.1466,30.0165 28.3992,30.6348C29.9611,31.4057 31.1058,32.8416 31.5589,34.5983C31.658,34.9825 31.777,35.9015 31.8233,36.6404C31.8696,37.3794 31.988,38.2984 32.0864,38.6826C32.7874,41.4203 35.0268,43.6825 37.7937,44.4477C38.8486,44.7394 40.7943,44.7159 41.8935,44.3981C44.5474,43.6305 46.5463,41.6586 47.4147,38.9513C47.6875,38.1009 47.7792,35.8021 47.6075,34.1222C46.5311,23.5971 38.9789,15.598 28.6249,14.0167C27.5692,13.8554 23.8296,13.7125 23.1343,13.8067ZM23.1343,20.7436C16.492,21.4402 11.2331,26.0263 9.5885,32.5561C9.1304,34.3756 8.9803,37.167 9.2218,39.3812C9.6948,43.7205 11.3428,47.777 14.1559,51.5267C15.1842,52.8975 16.8981,54.8105 17.2024,54.9271C18.1166,55.2775 19.0417,54.239 18.5862,53.3737C18.5182,53.2446 18.0466,52.6553 17.5383,52.0641C15.0164,49.1315 13.4043,46.4179 12.4303,43.4656C11.8228,41.6242 11.5782,40.2988 11.4381,38.0914C11.3329,36.4336 11.3398,35.9645 11.4866,34.8132C12.342,28.1043 17.1442,23.498 23.8056,22.9967C28.239,22.6631 32.3669,23.9539 35.0263,26.5053C37.1523,28.5449 38.2495,30.9187 38.5438,34.1146C38.7206,36.035 38.727,36.0616 39.0849,36.3653C39.556,36.765 40.1272,36.7434 40.5574,36.3097C40.8726,35.992 40.8855,35.9429 40.8855,35.0606C40.8855,32.3798 40.0222,29.4549 38.5601,27.182C37.8308,26.0482 36.0193,24.2039 34.8679,23.4227C33.4087,22.4328 31.3312,21.5487 29.4245,21.1063C27.637,20.6915 25.0523,20.5425 23.1343,20.7436ZM24.5202,34.5359C24.0081,34.7669 23.8907,35.0713 23.916,36.103C24.0788,42.7733 30.0729,49.2766 37.687,51.0438C39.5435,51.4747 41.8005,51.6829 42.4118,51.4795C43.0794,51.2574 43.3654,50.4088 42.9751,49.8083C42.7094,49.3995 42.4965,49.3354 41.0299,49.2219C38.5454,49.0297 36.7513,48.562 34.6486,47.5586C31.9866,46.2882 29.7736,44.4047 28.2544,42.1165C26.9999,40.2269 26.3692,38.433 26.1776,36.208C26.0767,35.0367 25.9143,34.6784 25.4035,34.4989C24.9926,34.3544 24.9156,34.3576 24.5202,34.5359Z"
android:fillColor="#969A97"
android:fillType="evenOdd"/>
</vector>
......@@ -23,7 +23,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginBottom="30dp"
android:layout_marginVertical="30dp"
android:text="@string/to_offline"
android:visibility="gone" />
......
......@@ -27,7 +27,7 @@
android:layout_gravity="start"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginBottom="@dimen/_12sdp"
android:text="@string/choose_lang"
android:text="Tilni tanlang"
android:textColor="@color/black100"
android:textSize="20sp"
android:textStyle="bold" />
......
This diff is collapsed.
......@@ -58,7 +58,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center"
android:text="Сохраненные\nкарты"
android:text="@string/save_cards"
android:textColor="@color/black100"
android:textSize="14sp" />
......@@ -97,7 +97,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center"
android:text="История\nпополнений"
android:text="@string/history_pay"
android:textColor="@color/black100"
android:textSize="14sp" />
......@@ -138,7 +138,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center"
android:text="Пополнить\nбаланс"
android:text="@string/pay_balance"
android:textColor="@color/black100"
android:textSize="14sp" />
......@@ -162,7 +162,7 @@
android:layout_gravity="center"
android:layout_marginTop="@dimen/_5sdp"
android:letterSpacing="0.05"
android:text="Powered by"
android:text="@string/powered_by"
android:textColor="@color/grey80"
android:textSize="12sp"
android:textStyle="bold" />
......
This diff is collapsed.
......@@ -7,6 +7,11 @@
android:background="@color/white"
android:fitsSystemWindows="false"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:id="@+id/top_div"
android:visibility="gone"
android:layout_height="24dp"/>
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
......
......@@ -166,13 +166,15 @@
<ImageView
android:id="@+id/btn_finger_print"
android:layout_width="56dp"
android:layout_height="56dp"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/remove"
android:src="@drawable/ic_finger_print"
app:layout_constraintBottom_toBottomOf="@id/btn_0"
app:layout_constraintStart_toStartOf="@id/btn_7"
app:layout_constraintEnd_toEndOf="@id/btn_7"
app:layout_constraintTop_toTopOf="@id/btn_0" />
......
......@@ -66,7 +66,7 @@
android:textColor="@color/white100"
android:paddingHorizontal="18dp"
android:paddingVertical="10dp"
android:text="+998 97 999-99-99"
tools:text="+998 97 999-99-99"
android:textSize="15sp" />
<View
......@@ -100,14 +100,14 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Дата рождения "
android:text="@string/birthday"
android:textColor="@color/grey110"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="31.12.1999"
tools:text="31.12.1999"
android:id="@+id/txt_birthday"
android:textColor="@color/black100"
android:textSize="15sp"
......
......@@ -56,7 +56,7 @@
android:inputType="numberPassword"
android:maxLength="7"
android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp"
android:paddingHorizontal="@dimen/_12sdp"
android:textSize="@dimen/_12sdp" />
</com.google.android.material.textfield.TextInputLayout>
......@@ -101,7 +101,7 @@
android:inputType="numberPassword"
android:maxLength="7"
android:paddingVertical="@dimen/_12sdp"
android:paddingStart="@dimen/_12sdp"
android:paddingHorizontal="@dimen/_12sdp"
android:textSize="@dimen/_12sdp" />
</com.google.android.material.textfield.TextInputLayout>
......@@ -133,7 +133,7 @@
android:id="@+id/txt_helper_mobiuz"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_10sdp"
android:layout_marginHorizontal="@dimen/_16sdp"
android:layout_marginTop="24dp"
android:textSize="14sp"
android:textColorLink="@color/primary100"
......
......@@ -56,7 +56,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Биометрия"
android:text="@string/biometria"
android:textColor="@color/black100"
android:textSize="18sp"
android:textStyle="bold" />
......@@ -64,7 +64,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Использовать для входа в приложение"
android:text="@string/for_enter_app"
android:textColor="@color/grey110"
android:textSize="15sp" />
</LinearLayout>
......@@ -98,7 +98,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Сменить PIN"
android:text="@string/change_pin"
android:textColor="@color/black100"
android:textSize="18sp"
android:textStyle="bold" />
......@@ -106,7 +106,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Изменение PIN для входа в приложение"
android:text="@string/change_pin_code"
android:textColor="@color/grey110"
android:textSize="15sp" />
</LinearLayout>
......@@ -134,7 +134,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Сменить пароль"
android:text="@string/change_passoword"
android:textColor="@color/black100"
android:textSize="18sp"
android:textStyle="bold" />
......
......@@ -11,8 +11,9 @@
android:paddingVertical="@dimen/_16sdp"
android:layout_height="180dp"
android:layout_marginEnd="16dp"
android:id="@+id/image_slider"
android:paddingHorizontal="12dp"
android:background="@drawable/banner"
android:background="@drawable/image_slider1"
android:orientation="vertical">
<ImageView
......@@ -28,6 +29,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:layout_marginBottom="8dp"
android:id="@+id/txt_description"
android:maxWidth="@dimen/_120sdp"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Dui, risus"
android:textColor="@color/black80"
......@@ -50,7 +52,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Узнать больше"
android:text="@string/more_know"
android:textColor="@color/primary100"
android:textSize="12sp"
android:textStyle="bold" />
......
......@@ -11,12 +11,13 @@
android:layout_width="84dp"
android:layout_height="84dp"
android:text="Ю"
android:layout_marginTop="24dp"
android:id="@+id/txt_avatar"
android:gravity="center"
android:textSize="24sp"
android:layout_gravity="start"
android:background="@drawable/bgn_avatar"
android:layout_marginTop="20dp" />
/>
<TextView
android:layout_width="wrap_content"
android:id="@+id/txt_user_name"
......
......@@ -47,7 +47,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/btn_ok"
android:textSize="14sp"
android:textSize="16sp"
android:layout_margin="24dp"
android:textStyle="bold"
android:elevation="2dp"
......
......@@ -4,11 +4,11 @@
<item
android:id="@+id/nav_graph_home"
android:icon="@drawable/ic_vector"
android:title="My MOBI" />
android:title="@string/my_mobi" />
<item
android:id="@+id/nav_graph_profile"
android:icon="@drawable/ic_vector_service"
android:title="Услуги" />
android:title="@string/services" />
</menu>
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="login">Login</string>
<string name="phone_number">Phone Number</string>
<string name="login">Авторизоваться</string>
<string name="phone_number">Телефонный номер</string>
<string name="ex304">Не исправимая ошибка</string>
<string name="ex400">неверный запрос</string>
<string name="ex401">Пользователь не зарегистрирован</string>
......@@ -19,16 +19,16 @@
<string name="jsonsyntaxexception">Ma\'lumot olishda xatolik</string>
<string name="connect_exception">Internet yo\'q</string>
<string name="ex_nothing">Неизвестная ошибка</string>
<string name="register">Registration</string>
<string name="password">Password</string>
<string name="choose_lang">Tilni tanlang</string>
<string name="back">Back</string>
<string name="register">Регистрация</string>
<string name="password">Пароль</string>
<string name="choose_lang">Выберите язык</string>
<string name="back">Назад</string>
<string name="enter_number">Введите номер</string>
<string name="continuoue">Далее</string>
<string name="phone">Телефон:</string>
<string name="think_password">Придумайте пароль</string>
<string name="enter">Войти</string>
<string name="enter_verification">Ведите код \nподтверждения</string>
<string name="enter_verification">Ведите код подтверждения</string>
<string name="sent_code_again">Отправить код заново</string>
<string name="install_pin">Установите PIN-код</string>
<string name="confirm_pin">Повторите этот PIN-код</string>
......@@ -47,22 +47,22 @@
<string name="next_spisanie">Следующее списание:</string>
<string name="forget_password">Забыли пароль?</string>
<string name="pin_not_same">Значения не совпадают</string>
<string name="remove">remove</string>
<string name="remove">Удалять</string>
<string name="password_same">Пароли совпали</string>
<string name="password_not_same">Пароли не совпали</string>
<string name="enter_pin_code">Введите PIN-код</string>
<string name="exit">Exit</string>
<string name="are_you_sure">Do you want to exit?</string>
<string name="no">No</string>
<string name="yes">Yes</string>
<string name="successfully">Successfully</string>
<string name="exit">Выход</string>
<string name="are_you_sure">Вы хотите выйти?</string>
<string name="no">Нет</string>
<string name="yes">Да</string>
<string name="successfully">Успешно</string>
<string name="ok">Ok</string>
<string name="helper_mobiuz">Для входа вы можете использовать пароль от интернет-помощника www.mobi.uz</string>
<string name="error_data">Error</string>
<string name="password_successfully_updated">Password successfully updated</string>
<string name="error_data">Ошибка</string>
<string name="password_successfully_updated">Пароль успешно обновлен</string>
<string name="enter_from_finger_or_face">Вход в приложение по отпечатку пальца или лицу</string>
<string name="cancel">Cancel</string>
<string name="my_tarif">My tarif</string>
<string name="cancel">Отмена</string>
<string name="my_tarif">Мы тариф</string>
<string name="bezopasnost">Безопасность</string>
<string name="language_app">Язык приложени</string>
<string name="support">Служба поддержки</string>
......@@ -82,23 +82,22 @@
<string name="cannot_change_pin">Вы не можете изменить новый пин-код на текущий пин-код</string>
<string name="cannot_change_password">Вы не можете изменить новый пароль на текущий пароль</string>
<string name="password_updated">Пароль успешно обновлен</string>
<string name="by_signing_up_you_re_agree_to_our_nterms_of_use_and_privacy_policy">By signing up, you\'re agree to our \nTerms of Use and Privacy Policy</string>
<string name="not_internet">Нет интернет соединения</string>
<string name="settings_safety">Настройки безопасности действуют только для основного номера +998 97 999-99-99</string>
<string name="popitok_error_password">"Замена пароля невозможна "</string>
<string name="popitok_error_password">"Замена пароля невозможен \nВы ввели неправильный пароль 3 раза"</string>
<string name="close_process">Закрыть</string>
<string name="login_register">Авторизация/Регистрация</string>
<string name="impossible_change_password">Замена пароля невозможна</string>
<string name="wrong_password">Неверный Пароль</string>
<string name="your_opinion_matters">Ваше мнение имеет значение</string>
<string name="send_an_appeal">Отправить обращение</string>
<string name="email">Email</string>
<string name="email">Электронное письмо</string>
<string name="telegram_bot">Телеграм бот</string>
<string name="contact_us">Связь с нами</string>
<string name="all_nomer">Со всех номеров</string>
<string name="for_abonent">Для абонентов</string>
<string name="pin_code_updated">Пин-код успешно обновлен</string>
<string name="popitok_error">"Смена ПИН кода невозможна \nВы ввели неправильный PIN код 3 раза"</string>
<string name="popitok_error">"Смена ПИН кода невозможен \nВы ввели неправильный PIN 3 раза"</string>
<string name="popitok">Неверный PIN-код \nОсталось %1$s попытки</string>
<string name="popitok_password">Неверный Пароль \nОсталось %1$s попытки</string>
<string name="confirm_new_pin">Подтвердите PIN-код</string>
......@@ -124,5 +123,22 @@
<string name="oferta_finans"><u>Оферта на предоставление финансовых услуг</u></string>
<string name="open_with_password">Войти по паролю</string>
<string name="sum_month">%1$s Сум/мес</string>
<string name="misic_all_with_you">Музыка всегда с тобой</string>
<string name="my_mobi">Мой MOBI</string>
<string name="vvesti_pin">Ввести PIN - код</string>
<string name="pin_code_error3">Вход невозможен \nВы ввели неправильный PIN 3 раза</string>
<string name="change_passoword">Сменить пароль</string>
<string name="change_pin_code">Изменение PIN для входа в приложение</string>
<string name="change_pin">Сменить PIN</string>
<string name="biometria">Биометрия</string>
<string name="for_enter_app">Использовать для входа в приложение</string>
<string name="birthday">Дата рождения</string>
<string name="save_cards">Сохраненные\nкарты</string>
<string name="history_pay">История\nпополнений</string>
<string name="pay_balance">Пополнить\nбаланс</string>
<string name="powered_by">Питаться от</string>
<string name="more_know">Узнать больше</string>
<string name="check_internet_and_try_again">Проверьте подключение к Интернету и попробуйте еще раз</string>
</resources>
\ No newline at end of file
This diff is collapsed.
......@@ -14,10 +14,10 @@
<string name="ex408">Тайм-аут запроса</string>
<string name="ex409">Конфликт</string>
<string name="ex413">Тайм-аут запроса</string>
<string name="ex422">Необработанный</string>
<string name="ex422" translatable="false">Необработанный</string>
<string name="ex429">Необработанный</string>
<string name="ex500">Ошибка сервера</string>
<string name="ex502">Неверный шлюз</string>
<string name="ex502" translatable="false">Неверный шлюз</string>
<string name="exelse">Непредвиденная ошибка, повторите попытку позже</string>
<string name="ioexception">Ошибка сетевого подключения</string>
<string name="jsonsyntaxexception">Ma\'lumot olishda xatolik</string>
......@@ -29,7 +29,7 @@
<string name="choose_lang">Tilni tanlang</string>
<string name="uzbek" translatable="false">O\'zbek</string>
<string name="english" translatable="false">English</string>
<string name="russian" translatable="false">Russian</string>
<string name="russian" translatable="false">Русский</string>
<string name="back">Back</string>
<string name="enter_number">Введите номер</string>
<string name="continuoue">Далее</string>
......@@ -110,6 +110,7 @@
<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_error3">Вход невозможен \nВы ввели неправильный PIN 3 раза</string>
<string name="pin_code_updated">Пин-код успешно обновлен</string>
<string name="for_abonent">Для абонентов</string>
<string name="all_nomer">Со всех номеров</string>
......@@ -140,11 +141,27 @@
<string name="not_internet_connect">Отсутствует активное подключение</string>
<string name="yes_internet_connect">Интернет соединение восстановлено</string>
<string name="oferta_finans"><u>Оферта на предоставление финансовых услуг</u></string>
<string name="by_signing_up_you_re_agree_to_our_nterms_of_use_and_privacy_policy">By signing up, you\'re agree to our \nTerms of Use and Privacy Policy</string>
<string name="by_signing_up_you_re_agree_to_our_nterms_of_use_and_privacy_policy" translatable="false">By signing up, you\'re agree to our \nTerms of Use and Privacy
Policy</string>
<string name="btn_try_again">Попробуй снова</string>
<string name="cannot_change_pin">You cannot change new pin to current pin</string>
<string name="cannot_change_password">You cannot change new password to current password</string>
<string name="open_with_password">Войти по паролю</string>
<string name="sum_month">%1$s Сум/мес</string>
<string name="misic_all_with_you">Musiqa har doim sen bilan</string>
<string name="my_mobi">My MOBI</string>
<string name="vvesti_pin">Ввести PIN - код</string>
<string name="change_passoword">Сменить пароль</string>
<string name="change_pin_code">Изменение PIN для входа в приложение</string>
<string name="change_pin">Сменить PIN</string>
<string name="biometria">Биометрия</string>
<string name="for_enter_app">Использовать для входа в приложение</string>
<string name="birthday">Дата рождения</string>
<string name="save_cards">Сохраненные\nкарты</string>
<string name="history_pay">История\nпополнений</string>
<string name="pay_balance">Пополнить\nбаланс</string>
<string name="powered_by">Powered by</string>
<string name="more_know">Узнать больше</string>
<string name="check_internet_and_try_again">Internet ulanishini tekshirib qayta urinib ko\'ring</string>
</resources>
\ No newline at end of file
......@@ -70,14 +70,6 @@
</style>
<style name="DialogThemeLight" parent="Theme.AppCompat.Light.Dialog.MinWidth">
<item name="colorAccent">@color/chuck_colorAccent</item>
<item name="android:colorAccent">@color/chuck_colorAccent</item>
<item name="android:background">@color/chuck_colorPrimary</item>
<item name="android:textColorPrimary">@color/chuck_colorPrimary</item>
<item name="android:textColorSecondary">@color/chuck_colorPrimary</item>
</style>
<style name="BtnStyle">
<item name="android:layout_height">@dimen/_48sdp</item>
<item name="android:layout_width">@dimen/_48sdp</item>
......
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