Commit 5101f34d authored by shohboz's avatar shohboz

[UPD] MUS-322 Feature, updated sdk and code rafactoring

parent be371d26
......@@ -43,6 +43,7 @@
<entry key="app/src/main/res/drawable/radius_top.xml" value="0.25416666666666665" />
<entry key="app/src/main/res/drawable/tab_indicator.xml" value="0.2756756756756757" />
<entry key="app/src/main/res/drawable/text_handle.xml" value="1.4214285714285715" />
<entry key="app/src/main/res/layout-large/fragment_pin.xml" value="0.25625" />
<entry key="app/src/main/res/layout/activity_auth.xml" value="0.15853658536585366" />
<entry key="app/src/main/res/layout/activity_language.xml" value="0.25" />
<entry key="app/src/main/res/layout/activity_main.xml" value="0.22" />
......@@ -69,6 +70,7 @@
<entry key="app/src/main/res/layout/fragment_forget_password.xml" value="0.21174863387978143" />
<entry key="app/src/main/res/layout/fragment_home.xml" value="0.18385416666666668" />
<entry key="app/src/main/res/layout/fragment_home_content.xml" value="0.266796875" />
<entry key="app/src/main/res/layout/fragment_install_pin.xml" value="0.25625" />
<entry key="app/src/main/res/layout/fragment_language.xml" value="0.25625" />
<entry key="app/src/main/res/layout/fragment_login.xml" value="0.2" />
<entry key="app/src/main/res/layout/fragment_main.xml" value="0.25625" />
......@@ -87,6 +89,7 @@
<entry key="app/src/main/res/layout/fragment_progress.xml" value="0.33242753623188404" />
<entry key="app/src/main/res/layout/fragment_register.xml" value="0.25" />
<entry key="app/src/main/res/layout/fragment_safety.xml" value="0.25625" />
<entry key="app/src/main/res/layout/fragment_security.xml" value="0.25625" />
<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" />
......@@ -104,6 +107,7 @@
<entry key="app/src/main/res/layout/layout_ask_create_task.xml" value="0.22643442622950818" />
<entry key="app/src/main/res/layout/layout_exit.xml" value="0.25625" />
<entry key="app/src/main/res/layout/layout_home_header.xml" value="0.25625" />
<entry key="app/src/main/res/layout/layout_offline_bottom_sheet.xml" value="0.266051912568306" />
<entry key="app/src/main/res/layout/layout_sender.xml" value="0.25625" />
<entry key="app/src/main/res/layout/motion_layout.xml" value="0.266796875" />
<entry key="app/src/main/res/menu/bottom_nav_menu.xml" value="0.3416666666666667" />
......
......@@ -64,7 +64,7 @@
android:windowSoftInputMode="adjustResize" />
<activity
android:name=".dev.BillingActivity"
android:name=".dev.BillingFragment"
android:configChanges="orientation"
android:exported="false"
android:screenOrientation="portrait"
......
......@@ -3,38 +3,39 @@ package com.mobiuz.app.dev
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentBillingBinding
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import uz.agr.mobiuz.AGRBilling
import uz.agr.sdk.coreui.extension.showMessage
import javax.inject.Inject
@AndroidEntryPoint
class BillingActivity : AppCompatActivity() {
class BillingFragment : BaseFragment(R.layout.fragment_billing) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentBillingBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController by lazy (LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
override fun onCreate(savedInstanceState: Bundle?) {
LocaleHelper.setLocale(this)
super.onCreate(savedInstanceState)
_bn = FragmentBillingBinding.inflate(layoutInflater)
setContentView(bn.root)
val window = window.decorView
window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentBillingBinding.bind(view)
setUpUI()
val window = requireActivity().window.decorView
window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
fun setUpUI() {
override fun setUpUI() {
bn.apply {
toolbar.setNavigationOnClickListener {
finish()
navController.navigateUp()
}
AGRBilling.hasCards().subscribe({
......@@ -48,7 +49,7 @@ class BillingActivity : AppCompatActivity() {
override fun invoke(phoneNumber: String) {
pref.isShowPin = false
startActivity(
AGRBilling.createCardsListIntent(this@BillingActivity, pref.userPhone.filter { it.isDigit() })
AGRBilling.createCardsListIntent(requireContext(), pref.userPhone.filter { it.isDigit() })
)
}
})
......@@ -63,7 +64,7 @@ class BillingActivity : AppCompatActivity() {
)
*/
startActivity(
AGRBilling.createReplenishBalanceIntent(this@BillingActivity, phoneNumber)
AGRBilling.createReplenishBalanceIntent(requireContext(), phoneNumber)
)
}
})
......@@ -73,7 +74,7 @@ class BillingActivity : AppCompatActivity() {
override fun invoke(phoneNumber: String) {
pref.isShowPin = false
startActivity(
AGRBilling.createHistoryIntent(this@BillingActivity, phoneNumber)
AGRBilling.createHistoryIntent(requireContext(), phoneNumber)
)
}
})
......@@ -81,8 +82,7 @@ class BillingActivity : AppCompatActivity() {
}
}
override fun collects() {}
private fun getPhoneNumber(listener: LoadPhoneNumber) {
val number = pref.userPhone.filter { it.isDigit() }
......
......@@ -10,7 +10,6 @@ import android.view.View
import androidx.activity.viewModels
import androidx.annotation.IdRes
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.bundleOf
import androidx.core.view.GravityCompat
import androidx.core.view.isVisible
......@@ -53,6 +52,7 @@ class MainActivity : AppCompatActivity() {
private var currentNavController: LiveData<NavController>? = null
private val viewModel: MainViewModel by viewModels()
private lateinit var receiver: BroadcastReceiver
private val intentFilter = IntentFilter()
// if offline type == 0
private var type = 0
......@@ -77,9 +77,7 @@ class MainActivity : AppCompatActivity() {
currentNavController?.value?.navigate(R.id.homeFragment)
}
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
FirebaseApp.initializeApp(this@MainActivity)
// throw java.lang.NullPointerException("cannot")
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this@MainActivity)
FirebaseMessaging.getInstance().token.addOnCompleteListener {
......@@ -96,14 +94,14 @@ class MainActivity : AppCompatActivity() {
}
if (intent?.action == CONSTANTS.MY_CONNECTIVITY_CHANGE){
type = NetworkUtil.getConnectivityStatus(this@MainActivity)
bn.btnTryAgain.isVisible = (type == 0) && (currentNavController?.value?.currentDestination?.id != R.id.fullScreenFragment)
bn.btnTryAgain.isVisible = (type == 0) && (currentNavController?.value?.currentDestination?.id != R.id.pinFragment)
if (type == 0) {
showMessage(getString(R.string.not_internet_connect))
}
}
}
}
val intentFilter = IntentFilter()
intentFilter.addAction(CONSTANTS.CONNECTIVITY_CHANGE)
intentFilter.addAction(CONSTANTS.MY_CONNECTIVITY_CHANGE)
registerReceiver(receiver, intentFilter)
......@@ -156,7 +154,7 @@ class MainActivity : AppCompatActivity() {
btnSafety.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen(R.id.safetyFragment)
navigateToSettingsScreen(R.id.securityFragment)
}
})
......@@ -218,10 +216,10 @@ 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.pinFragment &&
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))
currentNavController?.value?.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.TYPE_AFTER))
}
}
}
......@@ -293,7 +291,7 @@ class MainActivity : AppCompatActivity() {
bottomNavigationView = findViewById(R.id.bottom_nav_view)
val navGraphIds = listOf(
R.navigation.nav_graph_home,
R.navigation.nav_graph_profile
R.navigation.nav_graph_services
)
val controller = bottomNavigationView.setupWithNavController(
......
......@@ -46,45 +46,29 @@ class OfflineActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
_bn = ActivityOfflineBinding.inflate(layoutInflater)
setContentView(bn.root)
window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
adapter = ServiceAdapter(pref.language)
pref.isShowPin = false
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)
navController.popBackStack()
if (pref.isRegistered && pref.pinCode.isNotEmpty() && type != CONSTANTS.FROM_ONLINE) {
navController.navigate(R.id.fullScreenFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.OFFLINE))
} else {
navController.navigate(R.id.serviceFragment, bundleOf(CONSTANTS.TYPE_SERVICE to CONSTANTS.OFFLINE))
}
}
receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == CONSTANTS.CONNECTIVITY_CHANGE) {
sendBroadcast(Intent(CONSTANTS.MY_CONNECTIVITY_CHANGE))
}
if (intent?.action == CONSTANTS.MY_CONNECTIVITY_CHANGE) {
type = NetworkUtil.getConnectivityStatus(this@OfflineActivity)
bn.btnTryAgain.isVisible = (type != 0) && (navController.currentDestination?.id != R.id.fullScreenFragment)
bn.btnTryAgain.isVisible = (type != 0)
if (type != 0) {
showMessage(getString(R.string.yes_internet_connect))
}
}
}
}
intentFilter.addAction(CONSTANTS.CONNECTIVITY_CHANGE)
intentFilter.addAction(CONSTANTS.MY_CONNECTIVITY_CHANGE)
registerReceiver(receiver, intentFilter)
bn.btnTryAgain.setOnClickListener {
......@@ -95,34 +79,6 @@ class OfflineActivity : AppCompatActivity() {
}
override fun onResume() {
super.onResume()
if (pref.isRegistered && pref.isShowPin && pref.pinCode.isNotEmpty()) {
showPinCode()
} else {
pref.blockedTime = System.currentTimeMillis()
pref.isShowPin = true
}
}
override fun onStop() {
super.onStop()
pref.blockedTime = System.currentTimeMillis()
}
private fun showPinCode() {
if (pref.blockedTime < System.currentTimeMillis() - CONSTANTS.BLOCKED_TIME) {
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))
}
}
}
fun navigate() {
when {
!pref.isRegistered -> {
......@@ -135,7 +91,7 @@ class OfflineActivity : AppCompatActivity() {
else -> {
val intent = Intent(this, MainActivity::class.java)
intent.putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST)
// intent.putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
}
......@@ -147,7 +103,6 @@ class OfflineActivity : AppCompatActivity() {
override fun onDestroy() {
unregisterReceiver(receiver)
_bn = null
pref.blockedTime = 0
super.onDestroy()
}
}
\ No newline at end of file
......@@ -42,20 +42,19 @@ class SplashActivity : AppCompatActivity() {
@Inject
lateinit var pref: SharedPref
private lateinit var receiver: BroadcastReceiver
private val intentFilter = IntentFilter()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_bn = ActivitySplashBinding.inflate(layoutInflater)
setContentView(bn.root)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
// customLog("rect.top: ${getStatusBarHeight() / resources.displayMetrics.density}")
window.decorView.systemUiVisibility = View.VISIBLE
receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val type = NetworkUtil.getConnectivityStatus(this@SplashActivity)
if (type == 0) {
showMessage(getString(R.string.not_internet_connect))
if (pref.services.isNotEmpty()) {
lifecycleScope.launchWhenCreated {
delay(1500)
......@@ -70,7 +69,7 @@ class SplashActivity : AppCompatActivity() {
}
}
}
val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
intentFilter.addAction(CONSTANTS.CONNECTIVITY_CHANGE)
registerReceiver(receiver, intentFilter)
......@@ -83,17 +82,14 @@ class SplashActivity : AppCompatActivity() {
viewModel.servicesUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
// bn.progress.isVisible = false
bn.btnTryAgain.isVisible = false
navigate()
}
is UiStateObject.ERROR -> {
// bn.progress.isVisible = false
bn.btnTryAgain.isVisible = true
showMessage(it.message)
}
is UiStateObject.LOADING -> {
// bn.progress.isVisible = true
bn.btnTryAgain.isVisible = false
}
else -> Unit
......
......@@ -11,7 +11,9 @@ data class Translate(
val uz:String,
val ru:String,
val en:String
)
){
}
data class InnerData(
val title:Translate,
......
......@@ -25,6 +25,7 @@ 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
import com.mobiuz.app.dev.utils.extensions.showOfflineBottomSheetDialog
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
......@@ -39,25 +40,29 @@ class AuthActivity : AppCompatActivity() {
private lateinit var navController: NavController
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
private lateinit var receiver: BroadcastReceiver
private var type = 0
private var verificationCode: String? = null
private val intentFilter = IntentFilter()
private var phone = ""
// if offline type == 0
private var type = 0
override fun onCreate(savedInstanceState: Bundle?) {
LocaleHelper.setLocale(this)
super.onCreate(savedInstanceState)
_bn = ActivityAuthBinding.inflate(layoutInflater)
setContentView(bn.root)
val fragment = supportFragmentManager.findFragmentById(R.id.auth_container) as NavHostFragment
navController = NavHostFragment.findNavController(fragment)
FirebaseApp.initializeApp(this)
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
FirebaseMessaging.getInstance().token.addOnCompleteListener {
if (it.isSuccessful) pref.deviceToken = it.result.toString()
}
window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
intent?.let {
phone = it.getStringExtra(CONSTANTS.PHONE) ?: ""
......@@ -78,31 +83,20 @@ class AuthActivity : AppCompatActivity() {
}
}
}
bn.btnTryAgain.setOnClickListener {
if (type == 0){
navigate()
}
}
receiver = object : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == CONSTANTS.CONNECTIVITY_CHANGE){
sendBroadcast(Intent(CONSTANTS.MY_CONNECTIVITY_CHANGE))
}
if (intent?.action == CONSTANTS.MY_CONNECTIVITY_CHANGE){
type = NetworkUtil.getConnectivityStatus(this@AuthActivity)
bn.btnTryAgain.isVisible = (type == 0)
&& (navController.currentDestination?.id != R.id.pinFragment)
&& (navController.currentDestination?.id != R.id.biometricFragment)
if(type == 0){
showMessage(getString(R.string.not_internet_connect))
if((type == 0) && (navController.currentDestination?.id != R.id.pinFragment)
&& (navController.currentDestination?.id != R.id.biometricFragment))
showOfflineBottomSheetDialog()
}
}
}
}
val intentFilter = IntentFilter()
intentFilter.addAction(CONSTANTS.CONNECTIVITY_CHANGE)
intentFilter.addAction(CONSTANTS.MY_CONNECTIVITY_CHANGE)
registerReceiver(receiver,intentFilter)
}
......
......@@ -36,9 +36,9 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
var phone = ""
var phoneRaw = ""
var oldText = ""
var newText = ""
var phoneRaw = ""
private val viewModel: AuthViewModel by viewModels()
......@@ -53,14 +53,17 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
override fun setUpUI() {
bn.apply {
toolbar.setNavigationOnClickListener {
requireActivity().finish()
}
viewGroup.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
}
})
inputPhone.addTextChangedListener(object : TextWatcherWrapper() {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
......@@ -97,9 +100,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
}
})
toolbar.setNavigationOnClickListener {
requireActivity().finish()
}
}
}
......
......@@ -8,7 +8,7 @@ import com.mobiuz.app.databinding.ItemPinBinding
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.utils.extensions.SingleBlock
class PinAdapter : RecyclerView.Adapter<PinAdapter.VHolder>() {
class InstallPinAdapter : RecyclerView.Adapter<InstallPinAdapter.VHolder>() {
private val list: ArrayList<PinData> by lazy { ArrayList() }
private var listener: SingleBlock<String>? = null
......
package com.mobiuz.app.dev.ui.auth.pin
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.biometric.BiometricManager
import androidx.core.hardware.fingerprint.FingerprintManagerCompat
import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_STRONG
import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_WEAK
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
import co.infinum.goldfinger.Goldfinger
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentPinBinding
import com.mobiuz.app.databinding.FragmentInstallPinBinding
import com.mobiuz.app.dev.MainActivity
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.model.SharedPref
......@@ -26,19 +24,18 @@ import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.*
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
@AndroidEntryPoint
class PinFragment : BaseFragment(R.layout.fragment_pin) {
class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentPinBinding? = null
private var _bn: FragmentInstallPinBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
private val pinAdapter = InstallPinAdapter()
private var type = ""
private var titleText = ""
private var pinCode = ""
......@@ -56,7 +53,7 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentPinBinding.bind(view)
_bn = FragmentInstallPinBinding.bind(view)
biometricManager = BiometricManager.from(requireContext())
setUpUI()
......@@ -84,23 +81,18 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
rvPin.adapter = pinAdapter
titleText = when (type) {
CONSTANTS.NEW_PIN -> {
topDiv.isVisible = false
getString(R.string.install_pin)
}
CONSTANTS.CONFIRM_NEW_PIN -> {
topDiv.isVisible = false
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 -> {
......@@ -114,7 +106,7 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
pinAdapter.setOnDoneListener {
when (type) {
CONSTANTS.NEW_PIN -> {
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_NEW_PIN, CONSTANTS.PIN_CODE to it),
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_NEW_PIN, CONSTANTS.PIN_CODE to it),
Utils.navOptions())
}
CONSTANTS.CONFIRM_NEW_PIN -> {
......@@ -129,7 +121,7 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
}
CONSTANTS.CURRENT_PIN -> {
if(pref.pinCode == it){
navController.navigate(R.id.pinFragment, bundleOf( CONSTANTS.TYPE_PIN to CONSTANTS.CHANGE_NEW_PIN), Utils.navOptions())
navController.navigate(R.id.installPinFragment, bundleOf( CONSTANTS.TYPE_PIN to CONSTANTS.CHANGE_NEW_PIN), Utils.navOptions())
}else{
loadError()
}
......@@ -138,14 +130,15 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
if(pref.pinCode == it){
showMessage(getString(R.string.cannot_change_pin))
}else{
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_CHANGE_NEW_PIN, CONSTANTS.PIN_CODE to it), Utils.navOptions())
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_CHANGE_NEW_PIN, CONSTANTS.PIN_CODE to it), Utils
.navOptions())
}
}
CONSTANTS.CONFIRM_CHANGE_NEW_PIN -> {
if(pinCode == it){
pref.pinCode = pinCode
showCustomDialog(getString(R.string.pin_code_updated),true){
navController.popBackStack(R.id.safetyFragment, false)
navController.popBackStack(R.id.securityFragment, false)
}
}else{
......@@ -176,7 +169,7 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
}
private fun checkBiometric() : Boolean {
return when (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG or BiometricManager.Authenticators.BIOMETRIC_WEAK)) {
return when (biometricManager.canAuthenticate(BIOMETRIC_STRONG or BIOMETRIC_WEAK)) {
BiometricManager.BIOMETRIC_SUCCESS -> true
else -> false
}
......@@ -229,9 +222,7 @@ class PinFragment : BaseFragment(R.layout.fragment_pin) {
pinAdapter.submitList(data)
}
override fun collects() {
}
override fun collects() {}
override fun onDestroy() {
_bn = null
......
......@@ -21,6 +21,7 @@ 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.extensions.getColorCompat
import com.mobiuz.app.dev.utils.extensions.makeLinks
import com.mobiuz.app.dev.utils.extensions.showCustomDialog
import com.mobiuz.app.dev.utils.hideKeyboard
......@@ -38,6 +39,8 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val viewModel: AuthViewModel by viewModels()
private var password = ""
private var confirmPassword = ""
private var phone = ""
private var type = ""
private var code = ""
......@@ -61,6 +64,10 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
override fun setUpUI() {
bn.apply {
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
viewGroup.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
......@@ -79,22 +86,26 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
txtAgree.makeLinks(
Pair("Terms of Use", View.OnClickListener {
val uri = Uri.parse(when(pref.language){
val uri = Uri.parse(
when (pref.language) {
CONSTANTS.UZ -> CONSTANTS.LICENSE_UZ
CONSTANTS.RU -> CONSTANTS.LICENSE_RU
else -> CONSTANTS.LICENSE_EN
})
}
)
val intent = Intent(Intent.ACTION_VIEW)
intent.data = uri
startActivity(intent)
}),
Pair("Privacy Policy", View.OnClickListener {
val uri = Uri.parse(when(pref.language){
val uri = Uri.parse(
when (pref.language) {
CONSTANTS.UZ -> CONSTANTS.PRIVACY_POLICY_UZ
CONSTANTS.RU -> CONSTANTS.PRIVACY_POLICY_RU
else -> CONSTANTS.PRIVACY_POLICY_EN
})
}
)
val intent = Intent(Intent.ACTION_VIEW)
intent.data = uri
startActivity(intent)
......@@ -106,26 +117,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
inputPassword.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
txtCheckPassword.isVisible = (s.toString().length < 4)
val confirmText = inputConfirm.text.toString().trim()
if (confirmText.isNotEmpty()) {
if (s.toString() == confirmText) {
imageCheck.setImageResource(R.drawable.ic_baseline_check_circle)
txtCheckConfirm.text = getString(R.string.password_same)
txtCheckConfirm.setTextColor(requireActivity().resources.getColor(R.color.green100))
btnLogin.isEnabled = true
} else {
imageCheck.setImageResource(R.drawable.ic_vector_error)
txtCheckConfirm.text = getString(R.string.password_not_same)
btnLogin.isEnabled = false
txtCheckConfirm.setTextColor(requireActivity().resources.getColor(R.color.primary100))
}
imageCheck.isVisible = true
txtCheckConfirm.isVisible = true
} else {
imageCheck.isVisible = false
txtCheckConfirm.isVisible = false
}
checkPasswordAndConfirm()
}
})
......@@ -133,46 +125,52 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
inputConfirm.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if (s.toString() == inputPassword.text.toString().trim()) {
imageCheck.setImageResource(R.drawable.ic_baseline_check_circle)
txtCheckConfirm.text = getString(R.string.password_same)
txtCheckConfirm.setTextColor(requireActivity().resources.getColor(R.color.green100))
btnLogin.isEnabled = true
} else {
imageCheck.setImageResource(R.drawable.ic_vector_error)
txtCheckConfirm.text = getString(R.string.password_not_same)
btnLogin.isEnabled = false
txtCheckConfirm.setTextColor(requireActivity().resources.getColor(R.color.primary100))
}
imageCheck.isVisible = true
txtCheckConfirm.isVisible = true
checkPasswordAndConfirm()
}
})
btnLogin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
val password = inputPassword.text.toString().trim()
val confirm = inputConfirm.text.toString().trim()
when {
password.length < 4 || password != confirm -> {
}
else -> {
password = inputPassword.text.toString().trim()
confirmPassword = inputConfirm.text.toString().trim()
if(password == confirmPassword){
if (type == CONSTANTS.TYPE_FORGET) {
viewModel.resetPassword(UserAuth(phone.filter { it.isDigit() }, password, code))
} else {
viewModel.register(UserAuth(phone.filter { it.isDigit() }, password))
}
}
}
}
})
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
}
private fun checkPasswordAndConfirm(){
bn.apply {
password = inputPassword.text.toString().trim()
confirmPassword = inputConfirm.text.toString().trim()
btnLogin.isEnabled = (password.length > 3) && (password == confirmPassword)
txtCheckPassword.isVisible = password.length < 4
if (password.isNotEmpty() && confirmPassword.isNotEmpty()){
if (password == confirmPassword){
imageCheck.setImageResource(R.drawable.ic_baseline_check_circle)
txtCheckConfirm.text = getString(R.string.password_same)
txtCheckConfirm.setTextColor(getColorCompat(R.color.green100))
}else{
imageCheck.setImageResource(R.drawable.ic_vector_error)
txtCheckConfirm.text = getString(R.string.password_not_same)
txtCheckConfirm.setTextColor(getColorCompat(R.color.primary100))
}
imageCheck.isVisible = true
txtCheckConfirm.isVisible = true
}
}
}
override fun collects() {
......@@ -207,7 +205,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
showProgressDialog(false)
showCustomDialog(getString(R.string.password_successfully_updated),true){
navController.popBackStack(R.id.loginFragment, false)
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.NEW_PIN), Utils.navOptions())
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.NEW_PIN), Utils.navOptions())
}
}
is UiStateObject.ERROR -> {
......
......@@ -218,7 +218,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
pref.userPhone = phone
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.NEW_PIN), Utils.navOptions())
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.NEW_PIN), Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
......
package com.mobiuz.app.dev.ui.global
import android.os.Bundle
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import co.infinum.goldfinger.Goldfinger
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentPinDialogBinding
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.utils.extensions.SingleBlock
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.vibrate
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import java.lang.Exception
import javax.inject.Inject
@AndroidEntryPoint
class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentPinDialogBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
private var listener: SingleBlock<Boolean>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.FullScreenDialog)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentPinDialogBinding.bind(view)
isCancelable = false
setUpUI()
if (pref.isUseFingerPrint) loadFingerPrint()
}
private fun loadFingerPrint() {
val golfing = Goldfinger.Builder(requireContext()).build()
if (golfing.canAuthenticate()) {
val params = Goldfinger.PromptParams.Builder(this)
.title(getString(R.string.enter_from_finger_or_face))
.negativeButtonText(getString(R.string.cancel))
.build()
golfing.authenticate(params, object : Goldfinger.Callback {
override fun onResult(result: Goldfinger.Result) {
if(result.type() == Goldfinger.Type.SUCCESS){
dismiss()
}
customLog("onResult:${result.type()}, ${result.reason()}")
}
override fun onError(e: Exception) {
customLog("onError")
}
})
}
}
fun setUpUI() {
bn.apply {
loadData()
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.adapter = pinAdapter
txtNotPin.isVisible = false
pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated {
delay(50)
if (pref.pinCode == it) {
txtNotPin.isVisible = false
dismiss()
} else {
vibrate(requireContext())
cardPin.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake))
txtNotPin.isVisible = true
}
}
}
for (i in 0 until btnViewGroup.childCount) {
btnViewGroup.getChildAt(i).setOnClickListener {
when (it.id) {
R.id.btn_remove -> {
pinAdapter.removeItem()
txtNotPin.isVisible = false
}
R.id.with_password -> {
listener?.invoke(true)
}
R.id.btn_finger_print -> {
loadFingerPrint()
}
else -> {
val text = it as TextView
txtNotPin.isVisible = false
pinAdapter.addItem(text.text.toString().toInt())
}
}
}
}
}
}
private fun loadData() {
data.clear()
for (i in 0..3) {
data.add(PinData(-1))
}
pinAdapter.submitList(data)
}
fun setOnPinDoneListener(block: SingleBlock<Boolean>) {
listener = block
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
package com.mobiuz.app.dev.ui.global
import android.Manifest
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.mobiuz.app.databinding.BottomSheetUssdBinding
import com.mobiuz.app.databinding.LayoutOfflineBottomSheetBinding
import com.mobiuz.app.dev.OfflineActivity
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.model.UssdData
import com.mobiuz.app.dev.utils.extensions.checkPermission
import com.mobiuz.app.dev.utils.extensions.getCurrentName
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class OfflineBottomSheet() : BottomSheetDialogFragment() {
@Inject
lateinit var pref: SharedPref
private var _bn: LayoutOfflineBottomSheetBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private var lng = ""
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_bn = LayoutOfflineBottomSheetBinding.inflate(inflater)
return bn.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setUpUI()
}
private fun setUpUI() {
bn.apply {
lng = pref.language
btnZapros.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
pref.isShowPin = false
navigate()
}
})
btnOtmena.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
dismiss()
}
})
}
}
fun navigate(){
val intent = Intent(requireContext(), OfflineActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finishAffinity()
dismiss()
}
override fun onDestroy() {
super.onDestroy()
_bn = null
}
}
\ No newline at end of file
......@@ -16,14 +16,13 @@ import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
import co.infinum.goldfinger.Goldfinger
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentPinDialogBinding
import com.mobiuz.app.databinding.FragmentPinBinding
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.auth.pin.PinAdapter
import com.mobiuz.app.dev.ui.auth.pin.InstallPinAdapter
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.utils.NetworkUtil
import com.mobiuz.app.dev.utils.extensions.showCustomDialog
......@@ -35,14 +34,14 @@ import javax.inject.Inject
@AndroidEntryPoint
class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
class PinFragment : BaseFragment(R.layout.fragment_pin) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentPinDialogBinding? = null
private var _bn: FragmentPinBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
private val pinAdapter = InstallPinAdapter()
private lateinit var mainViewModel: MainViewModel
private var type = ""
private var errorCount = 3
......@@ -59,7 +58,7 @@ class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentPinDialogBinding.bind(view)
_bn = FragmentPinBinding.bind(view)
val window = requireActivity().window.decorView
window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
......@@ -197,9 +196,7 @@ class FullScreenFragment : BaseFragment(R.layout.fragment_pin_dialog) {
}
override fun collects() {
}
override fun collects() {}
private fun loadData() {
data.clear()
......
......@@ -11,11 +11,13 @@ import androidx.core.view.isVisible
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.tabs.TabLayoutMediator
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentHomeBinding
import com.mobiuz.app.dev.BillingActivity
import com.mobiuz.app.dev.BillingFragment
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.network.model.Customer
......@@ -48,20 +50,22 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
private var lastUpdateTime = 0L
private lateinit var matchParam: FrameLayout.LayoutParams
private lateinit var changedParam: FrameLayout.LayoutParams
private val navController : NavController by lazy (LazyThreadSafetyMode.NONE){ NavHostFragment.findNavController(this) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
viewModel.mainIndex()
viewModel.mainRoaming()
lastUpdateTime = System.currentTimeMillis()
matchParam = FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
changedParam = FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentHomeBinding.bind(view)
val window = requireActivity().window.decorView
window.systemUiVisibility = View.VISIBLE
requireActivity().window.decorView.systemUiVisibility = View.VISIBLE
setUpUI()
collects()
......@@ -70,9 +74,6 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
override fun setUpUI() {
bn.apply {
matchParam = FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
changedParam = FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
slider.adapter = sliderAdapter
TabLayoutMediator(tabIndicator, slider) { _, _ -> }.attach()
......@@ -99,8 +100,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
btnAddSum.setOnClickListener {
pref.isShowPin = false
pref.blockedTime = System.currentTimeMillis()
startActivity(Intent(requireContext(), BillingActivity::class.java))
navController.navigate(R.id.billingFragment)
}
val number = pref.userPhone.customMasketHome().replace("-", " ")
......@@ -112,9 +112,6 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
}
bounceScrollView.setOnOverScrollListener { fromStart, overScrolledDistance ->
// customLog("fromStart:$fromStart, overScroll:$overScroll, overScrolledDistance: $overScrolledDistance")
if (!fromStart) {
lastUpdateTime = System.currentTimeMillis()
}
......@@ -190,16 +187,13 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
bn.cardRoaming.isVisible = it.data.name != null
customLog("mainRoamingUiState SUCCESS${it.data}")
}
is UiStateObject.ERROR -> {
customLog("mainRoamingUiState ERROR${it.message}")
showProgressDialog(false)
bn.cardRoaming.isVisible = false
}
is UiStateObject.LOADING -> {
bn.cardRoaming.isVisible = false
customLog("mainRoamingUiState LOADING")
}
else -> Unit
}
......@@ -242,11 +236,11 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
super.onResume()
mainViewModel.bottomSheet(true)
mainViewModel.swipeDrawer(true)
customLog("onResume")
}
override fun onStop() {
super.onStop()
mainViewModel.bottomSheet(false)
mainViewModel.swipeDrawer(false)
}
......
......@@ -58,6 +58,13 @@ class ServiceFragment : BaseFragment(R.layout.fragment_service) {
mainViewModel.swipeDrawer(true)
}
override fun onStop() {
super.onStop()
mainViewModel.bottomSheet(false)
mainViewModel.swipeDrawer(false)
}
override fun setUpUI() {
bn.apply {
......@@ -89,11 +96,6 @@ class ServiceFragment : BaseFragment(R.layout.fragment_service) {
}
}
override fun onStop() {
super.onStop()
mainViewModel.swipeDrawer(false)
}
private fun navigateToServiceScreen(key: ServiceData) {
navController.navigate(R.id.ussdFragment, bundleOf(CONSTANTS.SERVICE to Gson().toJson(key)))
......
......@@ -14,9 +14,7 @@ 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.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
......@@ -50,19 +48,19 @@ class LanguageFragment : BaseFragment(R.layout.fragment_language) {
CONSTANTS.RU -> imageRussian.isVisible = true
CONSTANTS.EN -> imageEnglish.isVisible = true
}
uzbekLang.setOnClickListener(object : ButtonClick(){
uzbekLang.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
setLangAndNavigate(CONSTANTS.UZ)
}
})
russianLang.setOnClickListener(object : ButtonClick(){
russianLang.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
setLangAndNavigate(CONSTANTS.RU)
}
})
englishLang.setOnClickListener(object : ButtonClick(){
englishLang.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
setLangAndNavigate(CONSTANTS.EN)
}
......@@ -73,7 +71,7 @@ class LanguageFragment : BaseFragment(R.layout.fragment_language) {
private fun setLangAndNavigate(lang: String) {
pref.language = lang
AGRBilling.changeLanguage(requireContext(),lang)
AGRBilling.setLanguage(requireContext(), lang)
LocaleHelper.setLocale(requireContext())
val intent = Intent(requireContext(), MainActivity::class.java)
intent.putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST)
......
package com.mobiuz.app.dev.ui.settings.safety
package com.mobiuz.app.dev.ui.settings.security
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
......@@ -23,7 +22,6 @@ 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.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.getColorCompat
import com.mobiuz.app.dev.utils.extensions.showCustomDialog
import com.mobiuz.app.dev.utils.extensions.showMessage
......@@ -68,7 +66,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
val text = when (type) {
CONSTANTS.CURRENT_PASSWORD ->{
CONSTANTS.CURRENT_PASSWORD -> {
txtForgetPassword.isVisible = true
getString(R.string.enter_current_password)
}
......@@ -81,7 +79,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
}
txtPassword.text = text
viewGroup.setOnClickListener(object : ButtonClick(){
viewGroup.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
}
......@@ -89,7 +87,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
txtForgetPassword.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
if(type == CONSTANTS.CURRENT_PASSWORD){
if (type == CONSTANTS.CURRENT_PASSWORD) {
viewModel.forgetPassword(UserAuth(pref.userPhone.replace(" ", "").replace("+", "")))
}
}
......@@ -98,7 +96,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
inputPassword.addTextChangedListener(object : TextWatcherWrapper() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
if(type == CONSTANTS.CONFIRM_NEW_PASSWORD){
if (type == CONSTANTS.CONFIRM_NEW_PASSWORD) {
if (s.toString() == newPassword) {
imageCheck.setImageResource(R.drawable.ic_baseline_check_circle)
......@@ -113,7 +111,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
}
imageCheck.isVisible = true
txtCheckConfirm.isVisible = true
}else{
} else {
btnLogin.isEnabled = s.toString().length > 3
imageCheck.isVisible = false
txtCheckConfirm.isVisible = false
......@@ -145,9 +143,9 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
}
CONSTANTS.NEW_PASSWORD -> {
if(oldPassword == password){
if (oldPassword == password) {
showMessage(getString(R.string.cannot_change_password))
}else{
} else {
navController.navigate(
R.id.changePasswordFragment,
bundleOf(
......@@ -163,7 +161,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
CONSTANTS.CONFIRM_NEW_PASSWORD -> {
if (newPassword == password) {
viewModel.changePassword(ChangePassword(oldPassword,newPassword))
viewModel.changePassword(ChangePassword(oldPassword, newPassword))
}
}
}
......@@ -180,14 +178,14 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
}
private fun loadError(){
private fun loadError() {
bn.apply {
if (count == 0){
showCustomDialog(getString(R.string.popitok_error_password),false){
if (count == 0) {
showCustomDialog(getString(R.string.popitok_error_password), false) {
}
}else{
showMessage(getString(R.string.popitok_password,count.toString()))
} else {
showMessage(getString(R.string.popitok_password, count.toString()))
}
}
}
......@@ -208,20 +206,20 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
showProgressDialog(false)
}
is UiStateObject.ERROR -> {
if(it.fromServer){
if (it.fromServer) {
count--
if(count == 0){
showCustomDialog(getString(R.string.popitok_error_password), false){
if (count == 0) {
showCustomDialog(getString(R.string.popitok_error_password), false) {
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
startActivity(intent)
requireActivity().finish()
}
}else{
} else {
loadError()
}
}else{
} else {
showToastMessage(it.message)
}
......@@ -241,8 +239,8 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
showCustomDialog(getString(R.string.password_updated),true){
navController.popBackStack(R.id.safetyFragment, false)
showCustomDialog(getString(R.string.password_updated), true) {
navController.popBackStack(R.id.securityFragment, false)
}
}
is UiStateObject.ERROR -> {
......
package com.mobiuz.app.dev.ui.settings.safety
package com.mobiuz.app.dev.ui.settings.security
import android.content.Intent
import android.os.Build
......@@ -12,40 +12,33 @@ import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.BuildConfig
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentSafetyBinding
import com.mobiuz.app.databinding.FragmentSecurityBinding
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.customLog
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import uz.agr.sdk.core.entity.synxron.VersionSdk
// 35
// 93 320 36 00 = 30
import javax.inject.Inject
@AndroidEntryPoint
class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
class SecurityFragment : BaseFragment(R.layout.fragment_security) {
@Inject
lateinit var pref: SharedPref
private lateinit var biometricManager: BiometricManager
private var _bn: FragmentSafetyBinding? = null
private var _bn: FragmentSecurityBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentSafetyBinding.bind(view)
_bn = FragmentSecurityBinding.bind(view)
setUpUI()
collects()
biometricManager = BiometricManager.from(requireContext())
......@@ -91,7 +84,7 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
btnChangePin.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navController.navigate(R.id.pinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CURRENT_PIN), Utils.navOptions())
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CURRENT_PIN), Utils.navOptions())
}
})
btnChangePassword.setOnClickListener(object : ButtonClick() {
......@@ -105,19 +98,15 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
private fun checkBiometricAfter(toSettings:Boolean) {
when (biometricManager.canAuthenticate(BIOMETRIC_STRONG or BIOMETRIC_WEAK)) {
BiometricManager.BIOMETRIC_SUCCESS -> {
customLog("BIOMETRIC_SUCCESS")
bn.btnBiometric.isVisible = true
}
BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
customLog("BIOMETRIC_ERROR_NO_HARDWARE")
pref.isUseFingerPrint = false
bn.btnBiometric.isVisible = false
}
BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> {
customLog("BIOMETRIC_ERROR_NONE_ENROLLED")
customLog("${Build.VERSION.SDK_INT} >= ${Build.VERSION_CODES.R}")
if (toSettings){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){
......@@ -125,7 +114,6 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
putExtra(Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, BIOMETRIC_STRONG or BIOMETRIC_WEAK)
}
pref.isShowPin = false
customLog("BIOMETRIC_ERROR_NONE_ENROLLED INTENT")
startActivityForResult(enrollIntent, 1)
}else{
showMessage(getString(R.string.to_settings))
......@@ -135,15 +123,13 @@ class SafetyFragment : BaseFragment(R.layout.fragment_safety) {
pref.isUseFingerPrint = false
}
else -> Unit
else -> {
if (toSettings) showMessage(getString(R.string.to_settings))
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
}
private fun checkBiometric(): Boolean {
return when (biometricManager.canAuthenticate(BIOMETRIC_STRONG or BIOMETRIC_WEAK)) {
BiometricManager.BIOMETRIC_SUCCESS -> true
......
......@@ -26,7 +26,7 @@ import com.mobiuz.app.dev.model.Translate
import com.mobiuz.app.dev.network.model.Errors
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.ExitDialog
import com.mobiuz.app.dev.ui.global.FullScreenDialog
import com.mobiuz.app.dev.ui.global.OfflineBottomSheet
import com.mobiuz.app.dev.ui.global.SenderDialog
import retrofit2.HttpException
import java.io.IOException
......@@ -57,20 +57,8 @@ fun String.getDateTime(): String? {
}
}
fun FragmentActivity.showFullScreenDialog(block: (dialog: FullScreenDialog) -> Unit){
val time = SharedPref(this).blockedTime
if(time < System.currentTimeMillis() - CONSTANTS.BLOCKED_TIME){
val fragment = supportFragmentManager.findFragmentByTag(CONSTANTS.FULL_SCREEN_DIALOG)
if(fragment == null){
val dialog = FullScreenDialog()
dialog.setOnPinDoneListener {
block(dialog)
}
dialog.show(supportFragmentManager,CONSTANTS.FULL_SCREEN_DIALOG)
}
}
fun FragmentActivity.showOfflineBottomSheetDialog(){
OfflineBottomSheet().show(supportFragmentManager,CONSTANTS.FULL_SCREEN_DIALOG)
}
fun Activity.showMessage(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
......@@ -151,15 +139,8 @@ fun String.checkChangedPosition(new:String):Int{
fun String.maskedTextMobi():String{
var newText = ""
for (i in this.indices){
if(i == 2){
newText += " "
}
if(i == 5){
newText += " "
}
if(i == 7){
if(i == 2 || i == 5 || i == 7){
newText += " "
}
newText += this[i]
......@@ -169,15 +150,6 @@ fun String.maskedTextMobi():String{
return newText
}
//fun Fragment.showCustomDialog(string: String, status: Boolean, block: () -> Unit) {
// val snackBar = Snackbar.make(this.requireView(),string, Snackbar.LENGTH_LONG)
// .setBackgroundTint(Color.GRAY)
// .setTextColor(Color.WHITE)
// .setText(string)
// snackBar.show()
//
//}
fun TextView.makeLinks(vararg links: Pair<String, View.OnClickListener>) {
val spannableString = SpannableString(this.text)
var startIndexOfLink = -1
......@@ -262,12 +234,10 @@ fun String.customMasket():String{
new += ") "
}
if (i == 9){
new += "-"
}
if (i == 11){
if (i == 9 || i == 11){
new += "-"
}
new += text[i]
}
return new
......@@ -284,10 +254,7 @@ fun String.customMasketHome():String{
new += " "
}
if (i == 9){
new += "-"
}
if (i == 11){
if (i == 9 || i == 11){
new += "-"
}
new += text[i]
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white100"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true">
......@@ -12,19 +12,9 @@
android:id="@+id/auth_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph_auth"
tools:context=".dev.ui.auth.AuthActivity"/>
<Button
android:id="@+id/btn_try_again"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="30dp"
android:text="@string/to_offline"
android:visibility="gone" />
</LinearLayout>
......@@ -6,7 +6,7 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context=".dev.BillingActivity">
tools:context=".dev.BillingFragment">
<com.google.android.material.appbar.MaterialToolbar
......
......@@ -2,24 +2,18 @@
<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:id="@+id/view_group"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.mobiuz.app.dev.ui.home.StatusBarSpacer
android:id="@+id/div"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent" />
<FrameLayout
android:layout_width="match_parent"
android:id="@+id/frame"
app:layout_constraintTop_toBottomOf="@id/div"
android:layout_height="wrap_content">
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
......@@ -28,30 +22,30 @@
app:navigationIcon="@drawable/ic_baseline_arrow_back" />
<LinearLayout
android:id="@+id/error_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/primary100"
android:gravity="center"
android:visibility="invisible"
android:id="@+id/error_layout"
android:orientation="vertical"
android:background="@color/primary100"
android:layout_height="match_parent">
android:visibility="invisible">
<TextView
android:layout_width="wrap_content"
android:textColor="@color/white100"
android:id="@+id/error_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/wrong_password"
android:textColor="@color/white100"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:textColor="@color/white100"
android:id="@+id/error_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_14sdp"
android:text="@string/popitok"
android:textColor="@color/white100"
android:textSize="14sp" />
</LinearLayout>
......@@ -107,10 +101,10 @@
android:id="@+id/image_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_6sdp"
android:paddingHorizontal="6dp"
android:src="@drawable/ic_vector_error"
android:visibility="gone"
android:layout_marginTop="@dimen/_6sdp"
app:layout_constraintEnd_toStartOf="@id/txt_check_confirm"
app:layout_constraintStart_toStartOf="@id/layout_input_password"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
......@@ -122,8 +116,8 @@
android:layout_marginTop="@dimen/_6sdp"
android:text="@string/must_same"
android:textColor="@color/grey110"
android:visibility="gone"
android:textSize="13sp"
android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/image_check"
app:layout_constraintTop_toBottomOf="@id/layout_input_password" />
......
......@@ -5,48 +5,55 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:fitsSystemWindows="false"
android:fitsSystemWindows="true"
android:orientation="vertical">
<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" />
<TextView
style="@style/TitleTextStyle"
android:textSize="@dimen/_20sdp"
android:id="@+id/txt_enter_pin"
android:layout_marginTop="@dimen/_44sdp"
android:text="@string/enter_pin_code" />
style="@style/TitleTextStyle"
android:text="@string/install_pin" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/frame"
android:layout_weight="0.9">
android:layout_weight="1">
<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/_20sdp"
android:layout_marginBottom="@dimen/_20sdp"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginBottom="@dimen/_30sdp"
android:text="@string/pin_not_same"
android:textColor="@color/primary100"
android:textSize="@dimen/_10sdp"
android:textSize="16sp"
android:textStyle="bold"
android:visibility="gone" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_width="@dimen/_100sdp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_height="wrap_content">
android:gravity="center"
android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
android:id="@+id/card_pin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardCornerRadius="0dp"
android:minWidth="@dimen/_110sdp"
android:minHeight="@dimen/_32sdp">
android:layout_gravity="center"
android:minWidth="@dimen/_100sdp"
android:minHeight="@dimen/_32sdp"
app:cardCornerRadius="0dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pin"
......@@ -54,33 +61,31 @@
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal"
android:paddingHorizontal="18dp"
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/_110sdp"
android:background="@color/grey30"
android:layout_height="2dp"/>
android:layout_width="@dimen/_120sdp"
android:layout_height="2dp"
android:background="@color/grey30" />
</LinearLayout>
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/btn_view_group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2.8"
>
android:layout_weight="2.5">
<TextView
android:id="@+id/btn_1"
style="@style/BtnStyle"
app:layout_constraintHorizontal_chainStyle="packed"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_1"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintEnd_toStartOf="@id/btn_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......@@ -88,10 +93,11 @@
<TextView
android:id="@+id/btn_2"
style="@style/BtnStyle"
android:layout_marginHorizontal="@dimen/_26sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_2"
android:layout_marginHorizontal="@dimen/_26sdp"
app:layout_constraintEnd_toStartOf="@id/btn_3"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@id/btn_1"
app:layout_constraintTop_toTopOf="parent" />
......@@ -113,7 +119,8 @@
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintEnd_toStartOf="@id/btn_5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_1" />
app:layout_constraintTop_toBottomOf="@id/btn_1"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/btn_5"
......@@ -140,8 +147,8 @@
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_7"
app:layout_constraintEnd_toStartOf="@id/btn_8"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintEnd_toStartOf="@id/btn_8"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_4" />
......@@ -164,24 +171,11 @@
app:layout_constraintStart_toEndOf="@id/btn_8"
app:layout_constraintTop_toTopOf="@id/btn_7" />
<ImageView
android:id="@+id/btn_finger_print"
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" />
<TextView
android:id="@+id/btn_0"
style="@style/BtnStyle"
android:layout_marginTop="24dp"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_0"
app:layout_constraintStart_toStartOf="@id/btn_8"
......@@ -194,31 +188,13 @@
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/remove"
android:padding="@dimen/_12sdp"
android:padding="@dimen/_4sdp"
android:src="@drawable/ic_vector_remove"
app:layout_constraintBottom_toBottomOf="@id/btn_0"
app:layout_constraintStart_toStartOf="@id/btn_9"
app:layout_constraintTop_toTopOf="@id/btn_0" />
<TextView
android:id="@+id/with_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="@dimen/_20sdp"
android:background="?android:selectableItemBackground"
android:text="@string/open_with_password"
android:textColor="@color/primary100"
android:textSize="14sp"
android:textStyle="bold"
android:paddingHorizontal="@dimen/_20sdp"
android:paddingVertical="@dimen/_12sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_0" />
app:layout_constraintStart_toEndOf="@id/btn_0"
app:layout_constraintTop_toTopOf="@id/btn_0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
\ No newline at end of file
......@@ -3,13 +3,9 @@
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.mobiuz.app.dev.ui.home.StatusBarSpacer
android:id="@+id/top_div"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
......
......@@ -5,60 +5,48 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:fitsSystemWindows="false"
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.mobiuz.app.dev.ui.home.StatusBarSpacer
android:id="@+id/top_div"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent" />
<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" />
<TextView
android:id="@+id/txt_enter_pin"
style="@style/TitleTextStyle"
android:text="@string/install_pin" />
android:textSize="@dimen/_20sdp"
android:id="@+id/txt_enter_pin"
android:layout_marginTop="@dimen/_34sdp"
android:text="@string/enter_pin_code" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
android:id="@+id/frame"
android:layout_weight="0.9">
<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:layout_marginTop="@dimen/_20sdp"
android:layout_marginBottom="@dimen/_20sdp"
android:text="@string/pin_not_same"
android:textColor="@color/primary100"
android:textSize="16sp"
android:textSize="@dimen/_10sdp"
android:textStyle="bold"
android:visibility="gone" />
<LinearLayout
android:layout_width="@dimen/_100sdp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
android:orientation="vertical"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/card_pin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:minWidth="@dimen/_100sdp"
android:minHeight="@dimen/_32sdp"
app:cardCornerRadius="0dp">
app:cardCornerRadius="0dp"
android:minWidth="@dimen/_110sdp"
android:minHeight="@dimen/_32sdp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pin"
......@@ -66,31 +54,33 @@
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal"
android:paddingHorizontal="18dp"
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:layout_height="2dp"
android:background="@color/grey30" />
android:layout_width="@dimen/_110sdp"
android:background="@color/grey30"
android:layout_height="2dp"/>
</LinearLayout>
</FrameLayout>
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/btn_view_group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2.5">
android:layout_weight="2.8"
>
<TextView
android:id="@+id/btn_1"
style="@style/BtnStyle"
app:layout_constraintHorizontal_chainStyle="packed"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_1"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintEnd_toStartOf="@id/btn_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......@@ -98,11 +88,10 @@
<TextView
android:id="@+id/btn_2"
style="@style/BtnStyle"
android:layout_marginHorizontal="@dimen/_26sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_2"
android:layout_marginHorizontal="@dimen/_26sdp"
app:layout_constraintEnd_toStartOf="@id/btn_3"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@id/btn_1"
app:layout_constraintTop_toTopOf="parent" />
......@@ -124,8 +113,7 @@
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintEnd_toStartOf="@id/btn_5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_1"
app:layout_constraintVertical_chainStyle="packed" />
app:layout_constraintTop_toBottomOf="@id/btn_1" />
<TextView
android:id="@+id/btn_5"
......@@ -152,8 +140,8 @@
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_7"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintEnd_toStartOf="@id/btn_8"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_4" />
......@@ -176,11 +164,24 @@
app:layout_constraintStart_toEndOf="@id/btn_8"
app:layout_constraintTop_toTopOf="@id/btn_7" />
<ImageView
android:id="@+id/btn_finger_print"
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" />
<TextView
android:id="@+id/btn_0"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:layout_marginTop="24dp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_0"
app:layout_constraintStart_toStartOf="@id/btn_8"
......@@ -193,13 +194,31 @@
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/remove"
android:padding="@dimen/_4sdp"
android:padding="@dimen/_12sdp"
android:src="@drawable/ic_vector_remove"
app:layout_constraintBottom_toBottomOf="@id/btn_0"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/btn_0"
app:layout_constraintStart_toStartOf="@id/btn_9"
app:layout_constraintTop_toTopOf="@id/btn_0" />
<TextView
android:id="@+id/with_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="@dimen/_20sdp"
android:background="?android:selectableItemBackground"
android:text="@string/open_with_password"
android:textColor="@color/primary100"
android:textSize="14sp"
android:textStyle="bold"
android:paddingHorizontal="@dimen/_20sdp"
android:paddingVertical="@dimen/_12sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
\ No newline at end of file
......@@ -4,16 +4,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:fitsSystemWindows="false"
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.mobiuz.app.dev.ui.home.StatusBarSpacer
android:id="@+id/top_div"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
......
......@@ -4,14 +4,9 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.mobiuz.app.dev.ui.home.StatusBarSpacer
android:id="@+id/top_div"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
......
......@@ -4,13 +4,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fitsSystemWindows="true"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.mobiuz.app.dev.ui.home.StatusBarSpacer
android:id="@+id/top_div"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:src="@drawable/ic_rectangle_122"
android:layout_gravity="center"
android:layout_marginTop="12dp"
android:layout_height="wrap_content"/>
<TextView
style="@style/ServicesTextStyle"
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:layout_marginHorizontal="@dimen/_20sdp"
android:text="@string/not_internet_connect"
android:textSize="20sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_zapros"
style="@style/ButtonPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="24dp"
android:paddingVertical="12dp"
android:text="@string/to_offline"
android:textSize="14sp" />
<TextView
android:id="@+id/btn_otmena"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textStyle="bold"
android:background="?android:selectableItemBackground"
android:layout_marginHorizontal="24dp"
android:layout_marginBottom="@dimen/_16sdp"
android:paddingVertical="12dp"
android:text="@string/close_process"
android:textSize="14sp" />
</LinearLayout>
\ No newline at end of file
......@@ -7,7 +7,7 @@
android:title="@string/my_mobi" />
<item
android:id="@+id/nav_graph_profile"
android:id="@+id/nav_graph_services"
android:icon="@drawable/ic_vector_service"
android:title="@string/services" />
......
......@@ -23,10 +23,10 @@
tools:layout="@layout/fragment_login" />
<fragment
android:id="@+id/pinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.PinFragment"
android:id="@+id/installPinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.InstallPinFragment"
android:label="PinFragment"
tools:layout="@layout/fragment_pin" />
tools:layout="@layout/fragment_install_pin" />
<fragment
android:id="@+id/biometricFragment"
android:name="com.mobiuz.app.dev.ui.auth.biometric.BiometricFragment"
......
......@@ -2,7 +2,7 @@
<navigation 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"
app:startDestination="@id/fullScreenFragment"
app:startDestination="@id/pinFragment"
android:id="@+id/nav_graph_home">
<fragment
......@@ -12,10 +12,10 @@
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/pinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.PinFragment"
android:id="@+id/installPinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.InstallPinFragment"
android:label="PinFragment"
tools:layout="@layout/fragment_pin" />
tools:layout="@layout/fragment_install_pin" />
<fragment
android:id="@+id/languageFragment"
......@@ -28,10 +28,10 @@
android:name="com.mobiuz.app.dev.ui.settings.SupportFragment"
android:label="SupportFragment" />
<fragment
android:id="@+id/safetyFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.SafetyFragment"
android:id="@+id/securityFragment"
android:name="com.mobiuz.app.dev.ui.settings.security.SecurityFragment"
android:label="fragment_safety"
tools:layout="@layout/fragment_safety" />
tools:layout="@layout/fragment_security" />
<fragment
android:id="@+id/profileFragment"
android:name="com.mobiuz.app.dev.ui.settings.ProfileFragment"
......@@ -39,19 +39,19 @@
tools:layout="@layout/fragment_profile" />
<fragment
android:id="@+id/changePasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.ChangePasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.security.ChangePasswordFragment"
android:label="CurrentPasswordFragment" />
<fragment
android:id="@+id/billingFragment"
android:name="com.mobiuz.app.dev.BillingActivity"
android:name="com.mobiuz.app.dev.BillingFragment"
android:label="fragment_billing"
tools:layout="@layout/fragment_billing" />
<fragment
android:id="@+id/fullScreenFragment"
tools:layout="@layout/fragment_pin_dialog"
android:name="com.mobiuz.app.dev.ui.global.FullScreenFragment"
android:id="@+id/pinFragment"
tools:layout="@layout/fragment_pin"
android:name="com.mobiuz.app.dev.ui.global.PinFragment"
android:label="FullScreenFragment" />
</navigation>
\ No newline at end of file
......@@ -3,7 +3,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph_settings"
app:startDestination="@id/fullScreenFragment">
app:startDestination="@id/serviceFragment">
<fragment
android:id="@+id/serviceFragment"
tools:layout="@layout/fragment_service"
......@@ -14,10 +15,4 @@
android:name="com.mobiuz.app.dev.ui.service.UssdFragment"
android:label="ServicesFragmentActivity" />
<fragment
android:id="@+id/fullScreenFragment"
tools:layout="@layout/fragment_pin_dialog"
android:name="com.mobiuz.app.dev.ui.global.FullScreenFragment"
android:label="FullScreenFragment" />
</navigation>
\ No newline at end of file
......@@ -3,12 +3,12 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/serviceFragment"
android:id="@+id/nav_graph_profile">
android:id="@+id/nav_graph_services">
<fragment
android:id="@+id/fullScreenFragment"
tools:layout="@layout/fragment_pin_dialog"
android:name="com.mobiuz.app.dev.ui.global.FullScreenFragment"
android:id="@+id/pinFragment"
tools:layout="@layout/fragment_pin"
android:name="com.mobiuz.app.dev.ui.global.PinFragment"
android:label="FullScreenFragment" />
<fragment
......@@ -33,10 +33,10 @@
android:name="com.mobiuz.app.dev.ui.settings.SupportFragment"
android:label="SupportFragment" />
<fragment
android:id="@+id/safetyFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.SafetyFragment"
android:id="@+id/securityFragment"
android:name="com.mobiuz.app.dev.ui.settings.security.SecurityFragment"
android:label="fragment_safety"
tools:layout="@layout/fragment_safety" />
tools:layout="@layout/fragment_security" />
<fragment
android:id="@+id/profileFragment"
android:name="com.mobiuz.app.dev.ui.settings.ProfileFragment"
......@@ -44,13 +44,13 @@
tools:layout="@layout/fragment_profile" />
<fragment
android:id="@+id/changePasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.ChangePasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.security.ChangePasswordFragment"
android:label="CurrentPasswordFragment" />
<fragment
android:id="@+id/pinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.PinFragment"
android:id="@+id/installPinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.InstallPinFragment"
android:label="PinFragment"
tools:layout="@layout/fragment_pin" />
tools:layout="@layout/fragment_install_pin" />
</navigation>
\ No newline at end of file
......@@ -11,6 +11,7 @@
<item name="colorPrimaryDark">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
<item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>
<item name="android:forceDarkAllowed" tools:targetApi="q">false</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