Commit bafee89e authored by shohboz's avatar shohboz

[UPD] MUS-230 Feature, updated offline rejim and changed api response on verification code

parent 7317c993
......@@ -4,6 +4,7 @@ import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import com.mobiuz.app.databinding.ActivityLanguageBinding
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.AuthActivity
......@@ -25,7 +26,7 @@ class LanguageActivity : AppCompatActivity() {
_bn = ActivityLanguageBinding.inflate(layoutInflater)
setContentView(bn.root)
window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
bn.apply {
uzbekLang.setOnClickListener {
setLangAndNavigate(CONSTANTS.UZ)
......
package com.mobiuz.app.dev
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.Uri
import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.view.GravityCompat
import androidx.core.view.isVisible
import androidx.drawerlayout.widget.DrawerLayout
......@@ -18,7 +20,6 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.FirebaseApp
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.messaging.FirebaseMessaging
import com.google.gson.Gson
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivityMainBinding
import com.mobiuz.app.dev.model.SharedPref
......@@ -26,9 +27,8 @@ import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.FullScreenDialog
import com.mobiuz.app.dev.ui.settings.SettingsActivity
import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.NetworkUtil
import com.mobiuz.app.dev.utils.extensions.*
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.GlobalScope
......@@ -50,6 +50,8 @@ class MainActivity : AppCompatActivity() {
private var currentNavController: LiveData<NavController>? = null
private val viewModel: MainViewModel by viewModels()
private lateinit var receiver: BroadcastReceiver
// if offline type == 0
private var type = 0
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
......@@ -59,6 +61,7 @@ class MainActivity : AppCompatActivity() {
_bn = ActivityMainBinding.inflate(layoutInflater)
setContentView(bn.root)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
FirebaseApp.initializeApp(this)
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
......@@ -72,21 +75,21 @@ class MainActivity : AppCompatActivity() {
setUpUI()
collects()
receiver = object : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
type = NetworkUtil.getConnectivityStatus(this@MainActivity)
bn.btnTryAgain.isVisible = type == 0
if(type != 0){
showMessage(getString(R.string.yes_internet_connect))
}else{
showMessage(getString(R.string.not_internet_connect))
}
}
}
val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
registerReceiver(receiver,intentFilter)
// receiver = object : BroadcastReceiver(){
// override fun onReceive(context: Context?, intent: Intent?) {
// val type = NetworkUtil.getConnectivityStatus(this@MainActivity)
// if (type == 0){
// showMessage("Internet o'chdi")
// }else{
// showMessage("Internet yondi")
// }
//// customLog("onReceive=${type}")
// }
// }
//// val receiver = NetworkChangeReceiver()
// val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
// registerReceiver(receiver,intentFilter)
}
......@@ -94,7 +97,11 @@ class MainActivity : AppCompatActivity() {
private fun setUpUI() {
bn.apply {
bn.btnTryAgain.setOnClickListener {
if (type == 0){
navigate()
}
}
header.txtUserPhone.text = pref.userPhone.customMasketHome()
customLog("lang:${pref.language}")
when (pref.language) {
......@@ -108,7 +115,6 @@ class MainActivity : AppCompatActivity() {
GlobalScope.launch {
viewModel.logOut()
}
// uz.agr.sdk.open_source.ui.MainFormFragment
val intent = Intent(this@MainActivity, AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
......@@ -155,6 +161,13 @@ class MainActivity : AppCompatActivity() {
}
}
fun navigate(){
val intent = Intent(this, OfflineActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
finish()
}
private fun navigateUri(link: String) {
val uri = Uri.parse(link)
val intent = Intent(Intent.ACTION_VIEW)
......@@ -172,10 +185,11 @@ class MainActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
customLog("onResume: pref.isShowPin:${pref.isShowPin}")
if (pref.isShowPin) {
showPinCode()
} else {
pref.blockedTime = System.currentTimeMillis()
pref.isShowPin = true
}
}
......@@ -198,7 +212,7 @@ class MainActivity : AppCompatActivity() {
}
}
private fun navigateToSettingsScreen(resId:Int) {
private fun navigateToSettingsScreen(resId: Int) {
val window = window.decorView
window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
currentNavController?.value?.navigate(resId)
......@@ -222,7 +236,6 @@ class MainActivity : AppCompatActivity() {
viewModel.bottomSheetUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
customLog("bottomSheetUiState ${it.data}")
bn.bottomNavView.isVisible = it.data
}
else -> Unit
......@@ -247,10 +260,9 @@ class MainActivity : AppCompatActivity() {
viewModel.swipeDrawerUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
customLog("locked:${it.data}")
if(it.data){
if (it.data) {
bn.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
}else{
} else {
bn.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
}
}
......@@ -287,7 +299,7 @@ class MainActivity : AppCompatActivity() {
override fun onDestroy() {
_bn = null
// unregisterReceiver(receiver)
unregisterReceiver(receiver)
super.onDestroy()
}
}
\ No newline at end of file
package com.mobiuz.app.dev
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivityOfflineBinding
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.NetworkUtil
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.showFullScreenDialog
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
......@@ -22,6 +32,9 @@ class OfflineActivity : AppCompatActivity() {
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var adapter: ServiceAdapter
private lateinit var navController: NavController
private lateinit var receiver: BroadcastReceiver
// if offline type == 0
private var type = 0
@Inject
lateinit var pref: SharedPref
......@@ -32,6 +45,7 @@ class OfflineActivity : AppCompatActivity() {
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)
......@@ -39,11 +53,79 @@ class OfflineActivity : AppCompatActivity() {
navController.popBackStack()
navController.navigate(R.id.serviceFragment, bundleOf(CONSTANTS.TYPE_SERVICE to CONSTANTS.OFFLINE))
receiver = object : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
type = NetworkUtil.getConnectivityStatus(this@OfflineActivity)
bn.btnTryAgain.isVisible = type != 0
if(type != 0){
showMessage(getString(R.string.yes_internet_connect))
}else{
showMessage(getString(R.string.not_internet_connect))
}
}
}
val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
registerReceiver(receiver,intentFilter)
bn.btnTryAgain.setOnClickListener {
if (type != 0){
navigate()
}
}
}
override fun onResume() {
super.onResume()
customLog("onResume: pref.isShowPin:${pref.isShowPin}")
if (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() {
showFullScreenDialog {
finish()
pref.clearUserData()
val intent = Intent(this, AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
intent.putExtra(CONSTANTS.PHONE, pref.userPhone)
startActivity(intent)
it.dismiss()
}
}
fun navigate(){
when {
!pref.isRegistered -> {
startActivity(Intent(this, AuthActivity::class.java))
}
pref.pinCode.isEmpty() -> {
startActivity(Intent(this, AuthActivity::class.java).putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.PIN_CODE))
}
else -> {
val intent = Intent(this, 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)
}
}
finish()
}
override fun onDestroy() {
unregisterReceiver(receiver)
_bn = null
super.onDestroy()
}
......
......@@ -8,6 +8,7 @@ import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.view.GravityCompat
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
......@@ -40,15 +41,15 @@ class SplashActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
_bn = ActivitySplashBinding.inflate(layoutInflater)
setContentView(bn.root)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
receiver = object : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
val type = NetworkUtil.getConnectivityStatus(this@SplashActivity)
if (type == 0){
isTypeOffline = true
isTypeOffline = if (type == 0){
true
}else{
viewModel.services()
isTypeOffline = false
false
}
}
}
......@@ -58,9 +59,11 @@ class SplashActivity : AppCompatActivity() {
lifecycleScope.launchWhenCreated {
delay(1000)
if (isTypeOffline){
if (isTypeOffline && pref.services.isNotEmpty()){
startActivity(Intent(this@SplashActivity, OfflineActivity::class.java))
finish()
}else{
bn.btnTryAgain.isVisible = true
}
}
......
......@@ -12,7 +12,6 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
fun clearUserData(){
isRegistered = false
pinCode = ""
userName = ""
}
fun setDeviceToken(token: String) {
......
......@@ -12,12 +12,12 @@ interface ApiService {
@POST("customer/login")
suspend fun login(
@Body req: UserAuth
): ResponseList<Any>
): ResponseObject<String>
@POST("customer/register")
suspend fun register(
@Body req: UserAuth
): ResponseList<Any>
): ResponseObject<String>
@POST("customer/check-phone")
suspend fun checkPhone(
......@@ -35,7 +35,7 @@ interface ApiService {
@POST("customer/forget-password")
suspend fun forgetPassword(
@Body req: UserAuth
): ResponseList<Any>
): ResponseObject<String>
@POST("customer/check-reset-code")
suspend fun checkResetCode(
......@@ -53,7 +53,7 @@ interface ApiService {
@POST("customer/send-sms-code")
suspend fun reSendSms(
@Body req: UserAuth
): ResponseObject<Any>
): ResponseObject<String>
@POST("customer/check-password")
suspend fun checkPassword(
......
......@@ -39,7 +39,7 @@ class AuthRepository @Inject constructor(
return try {
val res = apiService.register(data)
when {
res.status -> UiStateObject.SUCCESS(res.message)
res.status && res.data != null -> UiStateObject.SUCCESS(res.data!!)
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
}
......@@ -73,7 +73,7 @@ class AuthRepository @Inject constructor(
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
UiStateObject.SUCCESS(res.data!!)
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
......@@ -123,7 +123,7 @@ class AuthRepository @Inject constructor(
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
UiStateObject.SUCCESS(res.data?:"")
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
......@@ -139,7 +139,7 @@ class AuthRepository @Inject constructor(
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
UiStateObject.SUCCESS(res.data ?: "")
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
......
package com.mobiuz.app.dev.ui.auth
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.google.firebase.FirebaseApp
......@@ -11,9 +17,13 @@ import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.messaging.FirebaseMessaging
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivityAuthBinding
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.NetworkUtil
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
......@@ -27,6 +37,8 @@ class AuthActivity : AppCompatActivity() {
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var navController: NavController
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
private lateinit var receiver: BroadcastReceiver
private var type = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -36,11 +48,7 @@ class AuthActivity : AppCompatActivity() {
navController = NavHostFragment.findNavController(fragment)
FirebaseApp.initializeApp(this)
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
// Firebase.messaging.subscribeToTopic("just").addOnCompleteListener { task ->
// Log.e("AAA", "subscribe: ${task.isSuccessful}")
// }
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
FirebaseMessaging.getInstance().token.addOnCompleteListener {
if (it.isSuccessful) pref.setDeviceToken(it.result.toString())
......@@ -48,23 +56,54 @@ class AuthActivity : AppCompatActivity() {
window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
intent?.let {
val type = it.getStringExtra(CONSTANTS.TYPE_AUTH)
if (type == CONSTANTS.PIN_CODE) {
when (it.getStringExtra(CONSTANTS.TYPE_AUTH)) {
CONSTANTS.PIN_CODE -> {
navController.popBackStack()
navController.navigate(R.id.pinFragment, null, Utils.navOptions())
}else if (type == CONSTANTS.LOGIN) {
}
CONSTANTS.LOGIN -> {
val phone = it.getStringExtra(CONSTANTS.PHONE)
navController.popBackStack()
navController.navigate(R.id.loginFragment, bundleOf(CONSTANTS.PHONE to phone ), Utils.navOptions())
}else if (type == CONSTANTS.TYPE_VERIFICATION) {
}
CONSTANTS.TYPE_VERIFICATION -> {
val phone = it.getStringExtra(CONSTANTS.PHONE)
val code = it.getStringExtra(CONSTANTS.PIN_CODE)
navController.popBackStack()
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone ), Utils.navOptions())
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone , CONSTANTS.PIN_CODE to code), Utils.navOptions())
}
}
}
bn.btnTryAgain.setOnClickListener {
if (type == 0){
navigate()
}
}
receiver = object : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
type = NetworkUtil.getConnectivityStatus(this@AuthActivity)
bn.btnTryAgain.isVisible = type == 0
if(type != 0){
showMessage(getString(R.string.yes_internet_connect))
}else{
showMessage(getString(R.string.not_internet_connect))
}
}
}
val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
registerReceiver(receiver,intentFilter)
}
fun navigate(){
val intent = Intent(this, OfflineActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
finish()
}
override fun onDestroy() {
unregisterReceiver(receiver)
_bn = null
super.onDestroy()
}
......
......@@ -121,7 +121,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
showProgressDialog(false)
bn.helperPassword.isVisible = false
bn.helperPhone.isVisible = false
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions())
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone, CONSTANTS.PIN_CODE to it.data), Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
......@@ -148,7 +148,8 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
R.id.myVerificationFragment,
bundleOf(
CONSTANTS.PHONE to phone,
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_FORGET
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_FORGET,
CONSTANTS.PIN_CODE to it.data
),
Utils.navOptions()
)
......
......@@ -72,7 +72,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
txtAgree.makeLinks(
Pair("Terms of Use", View.OnClickListener {
val uri = Uri.parse("https://www.mobi.uz/")
val uri = Uri.parse("https://ip.mobi.uz/selfcare/")
val intent = Intent(Intent.ACTION_VIEW)
intent.data = uri
startActivity(intent)
......@@ -149,10 +149,8 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
} else {
viewModel.register(UserAuth(phone.replace(" ", "").replace("+", ""), password))
}
}
}
}
})
......@@ -168,9 +166,10 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone), Utils.navOptions())
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone,CONSTANTS.PIN_CODE to it.data), Utils.navOptions())
}
is UiStateObject.ERROR -> {
code = ""
showProgressDialog(false)
showToastMessage(it.message)
}
......
......@@ -45,6 +45,7 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) {
private val viewModel: AuthViewModel by viewModels()
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var code = ""
private var verification_code = ""
private var phone = ""
......@@ -55,6 +56,7 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) {
arguments?.let {
phone = it.getString(CONSTANTS.PHONE) ?: ""
type = it.getString(CONSTANTS.TYPE_VERIFICATION) ?: ""
verification_code = it.getString(CONSTANTS.PIN_CODE) ?: ""
}
}
......@@ -100,12 +102,27 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) {
})
sentCodeAgain.setOnClickListener {
count(true)
viewModel.resetSmsCode(UserAuth(phone.replace("+", "").replace(" ", "")))
}
coutdownView.setOnCountdownEndListener {
count(false)
}
setVerificationCode()
}
}
private fun setVerificationCode() {
if(verification_code.length == 6){
bn.apply {
pin1.setText(verification_code[0].toString())
pin2.setText(verification_code[1].toString())
pin3.setText(verification_code[2].toString())
pin4.setText(verification_code[3].toString())
pin5.setText(verification_code[4].toString())
pin6.setText(verification_code[5].toString())
pin6.requestFocus()
btnLogin.isEnabled = true
}
}
}
......@@ -223,7 +240,9 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) {
when (it) {
is UiStateObject.SUCCESS -> {
showToastMessage(it.data)
verification_code = it.data
setVerificationCode()
count(true)
showProgressDialog(false)
}
is UiStateObject.ERROR -> {
......@@ -274,7 +293,7 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) {
sentCodeAgain.isVisible = !status
coutdownViewHelperText.isVisible = !status
coutdownView.isVisible = status
if (status) coutdownView.start(10000)
if (status) coutdownView.start(CONSTANTS.RESEND_CODE_TIME)
}
}
......
......@@ -39,6 +39,8 @@ object CONSTANTS {
const val DEFAULT_PHONE = "+998 97 999-99-99"
const val FULL_SCREEN_DIALOG = "full_screen_dialog"
const val RESEND_CODE_TIME = 10000L
const val BLOCKED_TIME = 6000
const val LONGITUDE = 69.2602108116081
const val LATITUDE = 41.34823322480444
......
......@@ -60,15 +60,13 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
bn.apply {
btnAddSum.setOnClickListener {
navController.navigate(R.id.billingFragment)
// navController.navigate(R.id.billingFragment)
}
toolbar.setNavigationOnClickListener {
mainViewModel.mainIndex(System.currentTimeMillis())
}
scrollView.viewTreeObserver.addOnScrollChangedListener {
if (scrollView.scrollY < 100) {
toolbarInsideLayout.isVisible = false
topDiv.setBackgroundColor(Color.TRANSPARENT)
......@@ -123,8 +121,11 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
is UiStateObject.LOADING -> {
isProgressing = true
if (isFirstProgressing) showProgressDialog(true)
isFirstProgressing = false
else {
bn.lottie.isVisible = true
isFirstProgressing = false
}
}
else -> Unit
}
......
......@@ -3,6 +3,7 @@ package com.mobiuz.app.dev.ui.service
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import com.mobiuz.app.databinding.ItemServiceBinding
import com.mobiuz.app.dev.model.ServiceData
......@@ -28,7 +29,9 @@ class ServiceAdapter(val lang: String) : RecyclerView.Adapter<ServiceAdapter.VHo
binding.apply {
txtTitle.text = d.title.getCurrentName(lang)
txtDescription.text = d.short_description.getCurrentName(lang)
val des = d.short_description.getCurrentName(lang)
txtDescription.text = des
txtDescription.isVisible = des.isNotEmpty()
cardView.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
listener?.invoke(d)
......
......@@ -273,6 +273,7 @@ class ChangePasswordFragment : BaseFragment(R.layout.fragment_change_password) {
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.TYPE_VERIFICATION)
intent.putExtra(CONSTANTS.PHONE, pref.userPhone)
intent.putExtra(CONSTANTS.PIN_CODE, it.data)
startActivity(intent)
showProgressDialog(false)
}
......
......@@ -47,7 +47,7 @@ fun Fragment.showCustomDialog(description:String,status:Boolean, block: () -> Un
fun FragmentActivity.showFullScreenDialog(block: (dialog: FullScreenDialog) -> Unit){
val time = SharedPref(this).blockedTime
if(time < System.currentTimeMillis() - 5000){
if(time < System.currentTimeMillis() - CONSTANTS.BLOCKED_TIME){
val fragment = supportFragmentManager.findFragmentByTag(CONSTANTS.FULL_SCREEN_DIALOG)
if(fragment == null){
val dialog = FullScreenDialog()
......
......@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true">
......@@ -10,9 +11,19 @@
android:id="@+id/auth_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
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_marginBottom="30dp"
android:text="@string/to_offline"
android:visibility="gone" />
</LinearLayout>
......@@ -19,6 +19,14 @@
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/btn_try_again"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="@string/try_again"
android:visibility="visible" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav_view"
android:layout_width="match_parent"
......
......@@ -2,6 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="false">
......@@ -9,8 +10,18 @@
android:id="@+id/offline_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph_offline" />
<Button
android:id="@+id/btn_try_again"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginBottom="30dp"
android:text="@string/try_again"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -115,7 +115,7 @@
android:layout_height="wrap_content"
android:paddingEnd="6dp"
android:src="@drawable/ic_vector_error"
android:visibility="visible"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@id/txt_check_confirm"
app:layout_constraintBottom_toBottomOf="@id/txt_check_confirm"
app:layout_constraintStart_toStartOf="@id/layout_input_confirm"
......
......@@ -29,7 +29,7 @@
style="@style/ServicesTextStyle"
android:layout_gravity="center"
android:layout_marginTop="@dimen/_20sdp"
android:text="Нет интернет соединения" />
android:text="@string/not_internet" />
<TextView
android:layout_width="wrap_content"
......@@ -38,7 +38,7 @@
android:layout_marginTop="10dp"
android:layout_marginBottom="24dp"
android:gravity="center"
android:text="Проверьте интернет соединение и попробуйте снова"
android:text="@string/not_internet_try_again"
android:textColor="@color/grey100"
android:textSize="14sp" />
</LinearLayout>
......@@ -50,7 +50,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="26dp"
android:text="Доступно"
android:text="@string/open"
android:textColor="@color/grey80"
android:visibility="gone" />
......@@ -75,13 +75,15 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_service"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="0dp"
android:layout_marginHorizontal="12dp"
android:layout_marginTop="@dimen/_20sdp"
android:layout_weight="1"
android:overScrollMode="never"
android:scrollbars="none"
android:visibility="visible"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</LinearLayout>
\ No newline at end of file
......@@ -40,7 +40,7 @@
<string name="change_all_time">Измените это в любое время в настройках</string>
<string name="skip">Пропустить</string>
<string name="enter_parol">Введите пароль:</string>
<string name="min_6">Должно быть не менее 6 символов</string>
<string name="min_6">Должно быть не менее 4 символов</string>
<string name="confirm_parol">Введите пароль повторно:</string>
<string name="must_same">Пароли должны совпадать</string>
<string name="my_number">Мой номер</string>
......
......@@ -40,7 +40,7 @@
<string name="change_all_time">Измените это в любое время в настройках</string>
<string name="skip">Пропустить</string>
<string name="enter_parol">Введите пароль:</string>
<string name="min_6">Должно быть не менее 6 символов</string>
<string name="min_6">Должно быть не менее 4 символов</string>
<string name="confirm_parol">Введите пароль повторно:</string>
<string name="must_same">Пароли должны совпадать</string>
<string name="my_number">Мой номер</string>
......
......@@ -40,7 +40,7 @@
<string name="change_all_time">Измените это в любое время в настройках</string>
<string name="skip">Пропустить</string>
<string name="enter_parol">Введите пароль:</string>
<string name="min_6">Должно быть не менее 6 символов</string>
<string name="min_6">Должно быть не менее 4 символов</string>
<string name="confirm_parol">Введите пароль повторно:</string>
<string name="must_same">Пароли должны совпадать</string>
<string name="my_number">Мой номер</string>
......
......@@ -103,8 +103,8 @@
<string name="enter_new_password">Введите новый пароль</string>
<string name="enter_confirm_new_password">Для подтверждения введите новый пароль ещё раз</string>
<string name="password_changed">Пароль изменен</string>
<string name="enter_old_pin">Ведите старый PIN-код</string>
<string name="forget_pin">Забыл PIN?</string>
<string name="enter_old_pin">Введите старый PIN-код</string>
<string name="forget_pin">Забыли PIN?</string>
<string name="enter_new_pin">Введите новый PIN-код</string>
<string name="confirm_new_pin">Подтвердите PIN-код</string>
<string name="wrong_pin">Неверный PIN-код</string>
......@@ -132,5 +132,13 @@
<string name="title_home">Home</string>
<string name="title_dashboard">Dashboard</string>
<string name="title_notifications">Notifications</string>
<string name="not_internet">Нет интернет соединения</string>
<string name="not_internet_try_again">Проверьте интернет соединение и попробуйте снова</string>
<string name="open">Доступно</string>
<string name="send">Отправить</string>
<string name="try_again">Повторить подключение</string>
<string name="to_offline">Перейти в офлайн режим</string>
<string name="not_internet_connect">Отсутствует активное подключение</string>
<string name="yes_internet_connect">Интернет соединение восстановлено</string>
</resources>
\ No newline at end of file
......@@ -12,6 +12,7 @@
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>
<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</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