Commit 07477fb9 authored by shohboz's avatar shohboz

[UPD] MUS-191 Feature, updated screens and view

parent 66e9f332
...@@ -4,23 +4,24 @@ ...@@ -4,23 +4,24 @@
package="com.mobiuz.app"> package="com.mobiuz.app">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" /> <uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.VIBRATE" />
<application <application
android:name=".dev.app.App" android:name=".dev.app.App"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:hardwareAccelerated="true"
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.MobiUzAndroid" android:theme="@style/Theme.MobiUzAndroid"
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
tools:targetApi="m"> tools:targetApi="m">
<activity
android:name=".dev.ui.service.ServicesActivity"
android:exported="false" />
<activity <activity
android:name=".dev.ui.settings.SettingsActivity" android:name=".dev.ui.settings.SettingsActivity"
android:exported="false" /> android:exported="false" />
...@@ -54,6 +55,7 @@ ...@@ -54,6 +55,7 @@
android:exported="false" android:exported="false"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" /> android:windowSoftInputMode="adjustResize" />
</application> </application>
</manifest> </manifest>
\ No newline at end of file
package com.mobiuz.app.dev package com.mobiuz.app.dev
import android.content.BroadcastReceiver
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.core.view.GravityCompat import androidx.core.view.GravityCompat
import androidx.core.view.isVisible
import androidx.drawerlayout.widget.DrawerLayout
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController import androidx.navigation.NavController
...@@ -13,6 +18,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView ...@@ -13,6 +18,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.FirebaseApp import com.google.firebase.FirebaseApp
import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.messaging.FirebaseMessaging import com.google.firebase.messaging.FirebaseMessaging
import com.google.gson.Gson
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivityMainBinding import com.mobiuz.app.databinding.ActivityMainBinding
import com.mobiuz.app.dev.model.SharedPref import com.mobiuz.app.dev.model.SharedPref
...@@ -22,10 +28,12 @@ import com.mobiuz.app.dev.ui.global.ButtonClick ...@@ -22,10 +28,12 @@ import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.FullScreenDialog import com.mobiuz.app.dev.ui.global.FullScreenDialog
import com.mobiuz.app.dev.ui.settings.SettingsActivity import com.mobiuz.app.dev.ui.settings.SettingsActivity
import com.mobiuz.app.dev.utils.extensions.setupWithNavController import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.extensions.showCustomExitDialog import com.mobiuz.app.dev.utils.extensions.*
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
...@@ -41,10 +49,12 @@ class MainActivity : AppCompatActivity() { ...@@ -41,10 +49,12 @@ class MainActivity : AppCompatActivity() {
private lateinit var bottomNavigationView: BottomNavigationView private lateinit var bottomNavigationView: BottomNavigationView
private var currentNavController: LiveData<NavController>? = null private var currentNavController: LiveData<NavController>? = null
private val viewModel: MainViewModel by viewModels() private val viewModel: MainViewModel by viewModels()
private lateinit var receiver: BroadcastReceiver
private lateinit var mFirebaseAnalytics: FirebaseAnalytics private lateinit var mFirebaseAnalytics: FirebaseAnalytics
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
LocaleHelper.setLocale(this)
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
_bn = ActivityMainBinding.inflate(layoutInflater) _bn = ActivityMainBinding.inflate(layoutInflater)
setContentView(bn.root) setContentView(bn.root)
...@@ -52,9 +62,6 @@ class MainActivity : AppCompatActivity() { ...@@ -52,9 +62,6 @@ class MainActivity : AppCompatActivity() {
FirebaseApp.initializeApp(this) FirebaseApp.initializeApp(this)
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this) mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
// Firebase.messaging.subscribeToTopic("just").addOnCompleteListener { task ->
// Log.e("AAA", "subscribe: ${task.isSuccessful}")
// }
FirebaseMessaging.getInstance().token.addOnCompleteListener { FirebaseMessaging.getInstance().token.addOnCompleteListener {
if (it.isSuccessful) pref.setDeviceToken(it.result.toString()) if (it.isSuccessful) pref.setDeviceToken(it.result.toString())
} }
...@@ -65,96 +72,142 @@ class MainActivity : AppCompatActivity() { ...@@ -65,96 +72,142 @@ class MainActivity : AppCompatActivity() {
setUpUI() setUpUI()
collects() collects()
showPinCode()
}
private fun showPinCode() { // receiver = object : BroadcastReceiver(){
intent?.let { // override fun onReceive(context: Context?, intent: Intent?) {
val arg = it.getStringExtra(CONSTANTS.FIRST) ?: "" // val type = NetworkUtil.getConnectivityStatus(this@MainActivity)
if (arg.isEmpty()) { // if (type == 0){
val dialog = FullScreenDialog() // showMessage("Internet o'chdi")
dialog.setOnPinDoneListener { // }else{
finishAffinity() // showMessage("Internet yondi")
pref.clearUserData() // }
val intent = Intent(this, AuthActivity::class.java) //// customLog("onReceive=${type}")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME // }
startActivity(intent) // }
} //// val receiver = NetworkChangeReceiver()
dialog.show(supportFragmentManager, "tag") // val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
} // registerReceiver(receiver,intentFilter)
}
} }
private fun setUpUI() { private fun setUpUI() {
bn.apply { bn.apply {
header.txtUserPhone.text = pref.userPhone header.txtUserPhone.text = pref.userPhone.customMasketHome()
txtLanguage.text = pref.language customLog("lang:${pref.language}")
btnExit.setOnClickListener(object : ButtonClick(){ when (pref.language) {
CONSTANTS.UZ -> txtLanguage.text = getString(R.string.uzbek)
CONSTANTS.RU -> txtLanguage.text = getString(R.string.russian)
CONSTANTS.EN -> txtLanguage.text = getString(R.string.english)
}
btnExit.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
showCustomExitDialog { showCustomExitDialog {
pref.clearUserData() GlobalScope.launch {
viewModel.logOut()
}
// uz.agr.sdk.open_source.ui.MainFormFragment
val intent = Intent(this@MainActivity, AuthActivity::class.java) val intent = Intent(this@MainActivity, AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent) startActivity(intent)
pref.clearUserData()
finish() finish()
bn.drawerLayout.closeDrawer(GravityCompat.START)
} }
} }
}) })
btnLanguage.setOnClickListener(object :ButtonClick(){ btnLanguage.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
val intent = Intent(this@MainActivity, SettingsActivity::class.java) navigateToSettingsScreen(R.id.languageFragment)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
bn.drawerLayout.closeDrawer(GravityCompat.START)
} }
}) })
btnSupport.setOnClickListener(object : ButtonClick(){ btnSupport.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
val intent = Intent(this@MainActivity, SettingsActivity::class.java) navigateToSettingsScreen(R.id.supportFragment)
intent.putExtra(CONSTANTS.TYPE_SETTINGS, CONSTANTS.SUPPORT)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
bn.drawerLayout.closeDrawer(GravityCompat.START)
} }
}) })
btnSafety.setOnClickListener(object : ButtonClick(){ btnSafety.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
val intent = Intent(this@MainActivity, SettingsActivity::class.java) navigateToSettingsScreen(R.id.safetyFragment)
intent.putExtra(CONSTANTS.TYPE_SETTINGS, CONSTANTS.SAFETY)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
bn.drawerLayout.closeDrawer(GravityCompat.START)
} }
}) })
header.headerLayout.setOnClickListener(object : ButtonClick(){ header.headerLayout.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
val intent = Intent(this@MainActivity, SettingsActivity::class.java) navigateToSettingsScreen(R.id.profileFragment)
intent.putExtra(CONSTANTS.TYPE_SETTINGS, CONSTANTS.PROFILE)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
bn.drawerLayout.closeDrawer(GravityCompat.START)
} }
}) })
txtRedactData.setOnClickListener { txtRedactData.setOnClickListener {
// bn.drawerLayout.closeDrawer(GravityCompat.START) navigateUri("https://www.mobi.uz/")
} }
txtPublicOferta.setOnClickListener { txtPublicOferta.setOnClickListener {
// bn.drawerLayout.closeDrawer(GravityCompat.START) navigateUri("https://www.mobi.uz/")
} }
txtConfidensialnost.setOnClickListener { txtConfidensialnost.setOnClickListener {
// bn.drawerLayout.closeDrawer(GravityCompat.START) navigateUri("https://www.mobi.uz/")
}
}
}
private fun navigateUri(link: String) {
val uri = Uri.parse(link)
val intent = Intent(Intent.ACTION_VIEW)
intent.data = uri
startActivity(intent)
pref.isShowPin = false
}
override fun onStop() {
super.onStop()
bn.drawerLayout.closeDrawer(GravityCompat.START)
}
override fun onResume() {
super.onResume()
if (pref.isShowPin) {
showPinCode()
} else {
pref.isShowPin = true
}
}
private fun showPinCode() {
intent?.let {
val arg = it.getStringExtra(CONSTANTS.FIRST) ?: ""
if (arg.isEmpty()) {
val dialog = FullScreenDialog()
dialog.setOnPinDoneListener {
finish()
pref.clearUserData()
val intent = Intent(this, AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
intent.putExtra(CONSTANTS.PHONE, pref.userPhone)
// intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
dialog.dismiss()
}
dialog.show(supportFragmentManager, "tag")
} }
it.removeExtra(CONSTANTS.FIRST)
} }
} }
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)
viewModel.bottomSheet(false)
bn.drawerLayout.closeDrawer(GravityCompat.START)
}
private fun collects() { private fun collects() {
lifecycleScope.launchWhenStarted { lifecycleScope.launchWhenStarted {
viewModel.mainIndexUiState.collect { viewModel.mainIndexUiState.collect {
...@@ -168,10 +221,40 @@ class MainActivity : AppCompatActivity() { ...@@ -168,10 +221,40 @@ class MainActivity : AppCompatActivity() {
} }
lifecycleScope.launchWhenStarted { lifecycleScope.launchWhenStarted {
viewModel.bottomSheetUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
customLog("bottomSheetUiState ${it.data}")
bn.bottomNavView.isVisible = it.data
}
else -> Unit
}
}
}
lifecycleScope.launchWhenStarted {
viewModel.userNameUiState.collect { viewModel.userNameUiState.collect {
when (it) { when (it) {
is UiStateObject.SUCCESS -> { is UiStateObject.SUCCESS -> {
pref.userName = it.data
bn.header.txtUserName.text = it.data bn.header.txtUserName.text = it.data
bn.header.txtAvatar.text = it.data[0].toString()
}
else -> Unit
}
}
}
lifecycleScope.launchWhenStarted {
viewModel.swipeDrawerUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
customLog("locked:${it.data}")
if(it.data){
bn.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
}else{
bn.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
}
} }
else -> Unit else -> Unit
} }
...@@ -206,6 +289,7 @@ class MainActivity : AppCompatActivity() { ...@@ -206,6 +289,7 @@ class MainActivity : AppCompatActivity() {
override fun onDestroy() { override fun onDestroy() {
_bn = null _bn = null
// unregisterReceiver(receiver)
super.onDestroy() super.onDestroy()
} }
} }
\ No newline at end of file
package com.mobiuz.app.dev package com.mobiuz.app.dev
import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.mobiuz.app.dev.network.model.Customer import com.mobiuz.app.dev.model.UserAuth
import com.mobiuz.app.dev.network.model.ChangePassword
import com.mobiuz.app.dev.network.model.UiStateObject import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.network.repository.AuthRepository
import com.mobiuz.app.dev.network.repository.MainRepository import com.mobiuz.app.dev.network.repository.MainRepository
import com.mobiuz.app.dev.utils.extensions.customLog
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
...@@ -22,16 +23,46 @@ class MainViewModel @Inject constructor( ...@@ -22,16 +23,46 @@ class MainViewModel @Inject constructor(
private val _userNameUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY) private val _userNameUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val userNameUiState: StateFlow<UiStateObject<String>> = _userNameUiState val userNameUiState: StateFlow<UiStateObject<String>> = _userNameUiState
fun setUserName(name: String){ fun setUserName(name: String) {
_userNameUiState.value = UiStateObject.SUCCESS(name) _userNameUiState.value = UiStateObject.SUCCESS(name)
} }
private val _mainIndexUiState = MutableStateFlow<UiStateObject<Long>>(UiStateObject.EMPTY) private val _mainIndexUiState = MutableStateFlow<UiStateObject<Long>>(UiStateObject.EMPTY)
val mainIndexUiState: StateFlow<UiStateObject<Long>> = _mainIndexUiState val mainIndexUiState: StateFlow<UiStateObject<Long>> = _mainIndexUiState
fun mainIndex(status:Long) = viewModelScope.launch { fun mainIndex(status: Long) = viewModelScope.launch {
_mainIndexUiState.value = UiStateObject.SUCCESS(status) _mainIndexUiState.value = UiStateObject.SUCCESS(status)
// _mainIndexUiState.value = repository.mainIndex() // _mainIndexUiState.value = repository.mainIndex()
} }
private val _servicesUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val servicesUiState: StateFlow<UiStateObject<String>> = _servicesUiState
fun services() = viewModelScope.launch {
_servicesUiState.value = UiStateObject.LOADING
_servicesUiState.value = repository.services()
}
private val _bottomSheetUiState = MutableStateFlow<UiStateObject<Boolean>>(UiStateObject.EMPTY)
val bottomSheetUiState: StateFlow<UiStateObject<Boolean>> = _bottomSheetUiState
fun bottomSheet(status:Boolean) = viewModelScope.launch {
_bottomSheetUiState.value = UiStateObject.EMPTY
_bottomSheetUiState.value = UiStateObject.SUCCESS(status)
}
private val _swipeDrawerUiState = MutableStateFlow<UiStateObject<Boolean>>(UiStateObject.EMPTY)
val swipeDrawerUiState: StateFlow<UiStateObject<Boolean>> = _swipeDrawerUiState
fun swipeDrawer(status:Boolean) = viewModelScope.launch {
Log.e("AAA","swipeDrawer:$status")
_swipeDrawerUiState.value = UiStateObject.EMPTY
_swipeDrawerUiState.value = UiStateObject.SUCCESS(status)
}
suspend fun logOut() = repository.logOut()
} }
\ No newline at end of file
...@@ -2,14 +2,22 @@ package com.mobiuz.app.dev ...@@ -2,14 +2,22 @@ package com.mobiuz.app.dev
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.mobiuz.app.databinding.ActivitySplashBinding import com.mobiuz.app.databinding.ActivitySplashBinding
import com.mobiuz.app.dev.model.SharedPref import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.auth.AuthActivity 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.CONSTANTS
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import javax.inject.Inject import javax.inject.Inject
...@@ -18,7 +26,7 @@ class SplashActivity : AppCompatActivity() { ...@@ -18,7 +26,7 @@ class SplashActivity : AppCompatActivity() {
private var _bn: ActivitySplashBinding? = null private var _bn: ActivitySplashBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val viewModel: MainViewModel by viewModels()
@Inject @Inject
lateinit var pref: SharedPref lateinit var pref: SharedPref
...@@ -27,27 +35,52 @@ class SplashActivity : AppCompatActivity() { ...@@ -27,27 +35,52 @@ class SplashActivity : AppCompatActivity() {
_bn = ActivitySplashBinding.inflate(layoutInflater) _bn = ActivitySplashBinding.inflate(layoutInflater)
setContentView(bn.root) setContentView(bn.root)
lifecycleScope.launchWhenCreated { viewModel.services()
delay(1000) bn.btnTryAgain.setOnClickListener(object : ButtonClick(){
when { override fun onSingleClick(v: View?) {
pref.language.isEmpty() -> { viewModel.services()
startActivity(Intent(this@SplashActivity, LanguageActivity::class.java)) }
})
lifecycleScope.launchWhenStarted {
viewModel.servicesUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
bn.btnTryAgain.isVisible = false
navigate()
}
is UiStateObject.ERROR -> {
bn.btnTryAgain.isVisible = true
showMessage(it.message)
}
is UiStateObject.LOADING -> {
bn.btnTryAgain.isVisible = false
}
else -> Unit
} }
}
}
!pref.isRegistered -> { }
startActivity(Intent(this@SplashActivity, AuthActivity::class.java))
}
pref.pin_code.isEmpty() -> { fun navigate(){
startActivity(Intent(this@SplashActivity, AuthActivity::class.java).putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.PIN_CODE)) when {
} pref.language.isEmpty() -> {
startActivity(Intent(this@SplashActivity, LanguageActivity::class.java))
}
else -> { !pref.isRegistered -> {
startActivity(Intent(this@SplashActivity, MainActivity::class.java)) startActivity(Intent(this@SplashActivity, AuthActivity::class.java))
} }
pref.pinCode.isEmpty() -> {
startActivity(Intent(this@SplashActivity, AuthActivity::class.java).putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.PIN_CODE))
}
else -> {
startActivity(Intent(this@SplashActivity, MainActivity::class.java))
} }
finish()
} }
finish()
} }
override fun onDestroy() { override fun onDestroy() {
......
...@@ -12,8 +12,8 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) { ...@@ -12,8 +12,8 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
fun clearUserData(){ fun clearUserData(){
isRegistered = false isRegistered = false
pin_code = "" pinCode = ""
setUserToken("") userName = ""
} }
fun setDeviceToken(token: String) { fun setDeviceToken(token: String) {
mySharedPref.edit().putString("device_token", token).apply() mySharedPref.edit().putString("device_token", token).apply()
...@@ -37,10 +37,10 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) { ...@@ -37,10 +37,10 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
mySharedPref.edit().putString(::language.name, value).apply() mySharedPref.edit().putString(::language.name, value).apply()
} }
var pin_code: String var pinCode: String
get() = mySharedPref.getString(::pin_code.name, "") ?: "" get() = mySharedPref.getString(::pinCode.name, "") ?: ""
set(value) { set(value) {
mySharedPref.edit().putString(::pin_code.name, value).apply() mySharedPref.edit().putString(::pinCode.name, value).apply()
} }
var isRegistered: Boolean var isRegistered: Boolean
...@@ -61,4 +61,22 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) { ...@@ -61,4 +61,22 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
mySharedPref.edit().putString(::userPhone.name, value).apply() mySharedPref.edit().putString(::userPhone.name, value).apply()
} }
var userName: String
get() = mySharedPref.getString(::userName.name, "") ?: ""
set(value) {
mySharedPref.edit().putString(::userName.name, value).apply()
}
var services: String
get() = mySharedPref.getString(::services.name, "") ?: ""
set(value) {
mySharedPref.edit().putString(::services.name, value).apply()
}
var isShowPin: Boolean
get() = mySharedPref.getBoolean(::isShowPin.name, true)
set(value) {
mySharedPref.edit().putBoolean(::isShowPin.name, value).apply()
}
} }
\ No newline at end of file
package com.mobiuz.app.dev.model package com.mobiuz.app.dev.model
data class UserAuth( data class UserAuth(
val phone: String, val phone: String? = null,
val password: String? = null, val password: String? = null,
val code: String? = null val code: String? = null
) )
\ No newline at end of file
...@@ -5,8 +5,10 @@ import com.mobiuz.app.dev.model.SharedPref ...@@ -5,8 +5,10 @@ import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.model.UserAuth import com.mobiuz.app.dev.model.UserAuth
import com.mobiuz.app.dev.network.api.ApiService import com.mobiuz.app.dev.network.api.ApiService
import com.mobiuz.app.dev.network.model.Action import com.mobiuz.app.dev.network.model.Action
import com.mobiuz.app.dev.network.model.ChangePassword
import com.mobiuz.app.dev.network.model.Customer import com.mobiuz.app.dev.network.model.Customer
import com.mobiuz.app.dev.network.model.UiStateObject import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.utils.extensions.getMessage
import com.mobiuz.app.dev.utils.extensions.userMessage import com.mobiuz.app.dev.utils.extensions.userMessage
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject import javax.inject.Inject
...@@ -24,13 +26,7 @@ class AuthRepository @Inject constructor( ...@@ -24,13 +26,7 @@ class AuthRepository @Inject constructor(
val res = apiService.checkPhone(data) val res = apiService.checkPhone(data)
when { when {
res.status -> UiStateObject.SUCCESS(res.data ?: Action()) res.status -> UiStateObject.SUCCESS(res.data ?: Action())
res.errors.isNotEmpty() -> { res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
var message = ""
res.errors.forEach {
message += "${it.message}\n"
}
UiStateObject.ERROR(message)
}
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
...@@ -44,13 +40,7 @@ class AuthRepository @Inject constructor( ...@@ -44,13 +40,7 @@ class AuthRepository @Inject constructor(
val res = apiService.register(data) val res = apiService.register(data)
when { when {
res.status -> UiStateObject.SUCCESS(res.message) res.status -> UiStateObject.SUCCESS(res.message)
res.errors.isNotEmpty() -> { res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
var message = ""
res.errors.forEach {
message += "${it.message}\n"
}
UiStateObject.ERROR(message)
}
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
...@@ -69,13 +59,7 @@ class AuthRepository @Inject constructor( ...@@ -69,13 +59,7 @@ class AuthRepository @Inject constructor(
pref.isRegistered = true pref.isRegistered = true
UiStateObject.SUCCESS(res.message) UiStateObject.SUCCESS(res.message)
} }
res.errors.isNotEmpty() -> { res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
var message = ""
res.errors.forEach {
message += "${it.message}\n"
}
UiStateObject.ERROR(message)
}
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
} catch (e: Exception) { } catch (e: Exception) {
...@@ -91,13 +75,7 @@ class AuthRepository @Inject constructor( ...@@ -91,13 +75,7 @@ class AuthRepository @Inject constructor(
res.status -> { res.status -> {
UiStateObject.SUCCESS(res.message) UiStateObject.SUCCESS(res.message)
} }
res.errors.isNotEmpty() -> { res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
var message = ""
res.errors.forEach {
message += "${it.message}\n"
}
UiStateObject.ERROR(message)
}
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
} catch (e: Exception) { } catch (e: Exception) {
...@@ -113,13 +91,7 @@ class AuthRepository @Inject constructor( ...@@ -113,13 +91,7 @@ class AuthRepository @Inject constructor(
res.status -> { res.status -> {
UiStateObject.SUCCESS(res.message) UiStateObject.SUCCESS(res.message)
} }
res.errors.isNotEmpty() -> { res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
var message = ""
res.errors.forEach {
message += "${it.message}\n"
}
UiStateObject.ERROR(message)
}
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
} catch (e: Exception) { } catch (e: Exception) {
...@@ -137,13 +109,7 @@ class AuthRepository @Inject constructor( ...@@ -137,13 +109,7 @@ class AuthRepository @Inject constructor(
pref.setUserToken(res.data?.token) pref.setUserToken(res.data?.token)
UiStateObject.SUCCESS(res.message) UiStateObject.SUCCESS(res.message)
} }
res.errors.isNotEmpty() -> { res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
var message = ""
res.errors.forEach {
message += "${it.message}\n"
}
UiStateObject.ERROR(message)
}
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
} catch (e: Exception) { } catch (e: Exception) {
...@@ -159,13 +125,55 @@ class AuthRepository @Inject constructor( ...@@ -159,13 +125,55 @@ class AuthRepository @Inject constructor(
res.status -> { res.status -> {
UiStateObject.SUCCESS(res.message) UiStateObject.SUCCESS(res.message)
} }
res.errors.isNotEmpty() -> { res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
var message = "" else -> UiStateObject.ERROR(res.message)
res.errors.forEach { }
message += "${it.message}\n" } catch (e: Exception) {
} UiStateObject.ERROR(e.userMessage(context))
UiStateObject.ERROR(message) }
}
suspend fun resetSmsCode(data: UserAuth): UiStateObject<String> {
return try {
val res = apiService.reSendSms(data)
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
}
}
suspend fun checkPassword(data: UserAuth): UiStateObject<String> {
return try {
val res = apiService.checkPassword(data)
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
}
}
suspend fun installPassword(data: ChangePassword): UiStateObject<String> {
return try {
val res = apiService.installPassword(data)
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
} }
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
} catch (e: Exception) { } catch (e: Exception) {
......
package com.mobiuz.app.dev.network.repository package com.mobiuz.app.dev.network.repository
import android.content.Context import android.content.Context
import com.google.gson.Gson
import com.mobiuz.app.dev.model.SharedPref import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.model.UserAuth
import com.mobiuz.app.dev.network.api.ApiService import com.mobiuz.app.dev.network.api.ApiService
import com.mobiuz.app.dev.network.model.ChangePassword
import com.mobiuz.app.dev.network.model.Customer import com.mobiuz.app.dev.network.model.Customer
import com.mobiuz.app.dev.network.model.UiStateObject import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.utils.extensions.getMessage
import com.mobiuz.app.dev.utils.extensions.userMessage import com.mobiuz.app.dev.utils.extensions.userMessage
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject import javax.inject.Inject
...@@ -24,17 +28,46 @@ class MainRepository @Inject constructor( ...@@ -24,17 +28,46 @@ class MainRepository @Inject constructor(
res.status && res.data != null -> { res.status && res.data != null -> {
UiStateObject.SUCCESS(res.data!!) UiStateObject.SUCCESS(res.data!!)
} }
res.errors.isNotEmpty() -> { res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
var message = "" else -> UiStateObject.ERROR(res.message)
res.errors.forEach { }
message += "${it.message}\n" } catch (e: Exception) {
} UiStateObject.ERROR(e.userMessage(context))
UiStateObject.ERROR(message) }
}
suspend fun logOut(): UiStateObject<String> {
return try {
val res = apiService.logOut()
when {
res.status -> {
UiStateObject.SUCCESS(res.message)
} }
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message) else -> UiStateObject.ERROR(res.message)
} }
} catch (e: Exception) { } catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context)) UiStateObject.ERROR(e.userMessage(context))
} }
} }
suspend fun services(): UiStateObject<String> {
return try {
val res = apiService.getServices()
when {
res.status -> {
pref.services = Gson().toJson(res.data)
UiStateObject.SUCCESS(res.message)
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
}
}
} }
\ No newline at end of file
package com.mobiuz.app.dev.ui
import android.content.BroadcastReceiver
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.core.view.GravityCompat
import androidx.fragment.app.viewModels
import androidx.lifecycle.LiveData
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.analytics.FirebaseAnalytics
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivityMainBinding
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.settings.SettingsActivity
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.customMasketHome
import com.mobiuz.app.dev.utils.extensions.setupWithNavController
import com.mobiuz.app.dev.utils.extensions.showCustomExitDialog
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import javax.inject.Inject
@AndroidEntryPoint
class MainFragment : BaseFragment(R.layout.fragment_main) {
@Inject
lateinit var pref: SharedPref
private var _bn: ActivityMainBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var bottomNavigationView: BottomNavigationView
private var currentNavController: LiveData<NavController>? = null
private val viewModel: MainViewModel by viewModels()
private lateinit var receiver: BroadcastReceiver
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = ActivityMainBinding.bind(view)
if (savedInstanceState == null) {
setupBottomNavigationBar()
}
setUpUI()
collects()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_bn = ActivityMainBinding.inflate(layoutInflater)
if (savedInstanceState == null) {
setupBottomNavigationBar()
}
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
header.txtUserPhone.text = pref.userPhone.customMasketHome()
customLog("lang:${pref.language}")
when (pref.language) {
CONSTANTS.UZ -> txtLanguage.text = getString(R.string.uzbek)
CONSTANTS.RU -> txtLanguage.text = getString(R.string.russian)
CONSTANTS.EN -> txtLanguage.text = getString(R.string.english)
}
btnExit.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
showCustomExitDialog {
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finish()
}
}
})
btnLanguage.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen("")
}
})
btnSupport.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen(CONSTANTS.SUPPORT)
}
})
btnSafety.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen(CONSTANTS.SAFETY)
}
})
header.headerLayout.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen(CONSTANTS.PROFILE)
}
})
txtRedactData.setOnClickListener {
}
txtPublicOferta.setOnClickListener {
}
txtConfidensialnost.setOnClickListener {
}
}
}
private fun navigateToSettingsScreen(key: String) {
val intent = Intent(requireContext(), SettingsActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_SETTINGS, key)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
}
override fun collects() {
lifecycleScope.launchWhenStarted {
viewModel.mainIndexUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
bn.drawerLayout.openDrawer(GravityCompat.START)
}
else -> Unit
}
}
}
lifecycleScope.launchWhenStarted {
viewModel.userNameUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
pref.userName = it.data
bn.header.txtUserName.text = it.data
bn.header.txtAvatar.text = it.data[0].toString()
}
else -> Unit
}
}
}
}
private fun setupBottomNavigationBar() {
try {
bottomNavigationView = requireActivity().findViewById(R.id.bottom_nav_view)
val navGraphIds = listOf(
R.navigation.nav_graph_home,
R.navigation.nav_graph_profile
)
val controller = bottomNavigationView.setupWithNavController(
navGraphIds = navGraphIds,
fragmentManager = parentFragmentManager,
containerId = R.id.nav_host_fragment,
intent = requireActivity().intent
)
currentNavController = controller
} catch (e: Exception) {
e.printStackTrace()
}
requireActivity()
}
fun onSupportNavigateUp(): Boolean {
return currentNavController?.value?.navigateUp() ?: false
}
override fun onDestroy() {
_bn = null
// unregisterReceiver(receiver)
super.onDestroy()
}
}
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.mobiuz.app.dev.ui.auth ...@@ -3,6 +3,7 @@ package com.mobiuz.app.dev.ui.auth
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import com.google.firebase.FirebaseApp import com.google.firebase.FirebaseApp
...@@ -51,6 +52,14 @@ class AuthActivity : AppCompatActivity() { ...@@ -51,6 +52,14 @@ class AuthActivity : AppCompatActivity() {
if (type == CONSTANTS.PIN_CODE) { if (type == CONSTANTS.PIN_CODE) {
navController.popBackStack() navController.popBackStack()
navController.navigate(R.id.pinFragment, null, Utils.navOptions()) navController.navigate(R.id.pinFragment, null, Utils.navOptions())
}else if (type == 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) {
val phone = it.getStringExtra(CONSTANTS.PHONE)
navController.popBackStack()
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone ), Utils.navOptions())
} }
} }
} }
......
...@@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel ...@@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.mobiuz.app.dev.model.UserAuth import com.mobiuz.app.dev.model.UserAuth
import com.mobiuz.app.dev.network.model.Action import com.mobiuz.app.dev.network.model.Action
import com.mobiuz.app.dev.network.model.ChangePassword
import com.mobiuz.app.dev.network.model.UiStateObject import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.network.repository.AuthRepository import com.mobiuz.app.dev.network.repository.AuthRepository
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
...@@ -79,4 +80,33 @@ class AuthViewModel @Inject constructor( ...@@ -79,4 +80,33 @@ class AuthViewModel @Inject constructor(
_resetPasswordUiState.value = repository.resetPassword(data) _resetPasswordUiState.value = repository.resetPassword(data)
_resetPasswordUiState.value = UiStateObject.EMPTY _resetPasswordUiState.value = UiStateObject.EMPTY
} }
private val _resetSmsCodeUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val resetSmsCodeUiState: StateFlow<UiStateObject<String>> = _resetSmsCodeUiState
fun resetSmsCode(data: UserAuth) = viewModelScope.launch {
_resetSmsCodeUiState.value = UiStateObject.LOADING
_resetSmsCodeUiState.value = repository.resetSmsCode(data)
_resetSmsCodeUiState.value = UiStateObject.EMPTY
}
private val _checkPasswordUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val checkPasswordUiState: StateFlow<UiStateObject<String>> = _checkPasswordUiState
fun checkPassword(data: UserAuth) = viewModelScope.launch {
_checkPasswordUiState.value = UiStateObject.LOADING
_checkPasswordUiState.value = repository.checkPassword(data)
_checkPasswordUiState.value = UiStateObject.EMPTY
}
private val _changePasswordUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val changePasswordUiState: StateFlow<UiStateObject<String>> = _changePasswordUiState
fun changePassword(data: ChangePassword) = viewModelScope.launch {
_changePasswordUiState.value = UiStateObject.LOADING
_changePasswordUiState.value = repository.installPassword(data)
_changePasswordUiState.value = UiStateObject.EMPTY
}
} }
\ No newline at end of file
...@@ -26,6 +26,7 @@ import com.mobiuz.app.dev.ui.global.TextWatcherWrapper ...@@ -26,6 +26,7 @@ import com.mobiuz.app.dev.ui.global.TextWatcherWrapper
import com.mobiuz.app.dev.utils.Utils import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.makeLinks import com.mobiuz.app.dev.utils.extensions.makeLinks
import com.mobiuz.app.dev.utils.extensions.showCustomDialog import com.mobiuz.app.dev.utils.extensions.showCustomDialog
import com.mobiuz.app.dev.utils.hideKeyboard
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
...@@ -56,6 +57,12 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) { ...@@ -56,6 +57,12 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
viewGroup.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
}
})
txtHelperMobiuz.makeLinks(Pair("www.mobi.uz", View.OnClickListener { txtHelperMobiuz.makeLinks(Pair("www.mobi.uz", View.OnClickListener {
val uri = Uri.parse("https://www.mobi.uz/") val uri = Uri.parse("https://www.mobi.uz/")
val intent = Intent(Intent.ACTION_VIEW) val intent = Intent(Intent.ACTION_VIEW)
......
...@@ -21,6 +21,7 @@ import com.mobiuz.app.dev.ui.global.CONSTANTS ...@@ -21,6 +21,7 @@ import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.TextWatcherWrapper import com.mobiuz.app.dev.ui.global.TextWatcherWrapper
import com.mobiuz.app.dev.utils.Utils import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.makeLinks import com.mobiuz.app.dev.utils.extensions.makeLinks
import com.mobiuz.app.dev.utils.hideKeyboard
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
...@@ -55,7 +56,14 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) { ...@@ -55,7 +56,14 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
txtHelperMobiuz.makeLinks(Pair("www.mobi.uz", View.OnClickListener { viewGroup.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
}
})
txtHelperMobiuz.makeLinks(
Pair("www.mobi.uz", View.OnClickListener {
val uri = Uri.parse("https://www.mobi.uz/") val uri = Uri.parse("https://www.mobi.uz/")
val intent = Intent(Intent.ACTION_VIEW) val intent = Intent(Intent.ACTION_VIEW)
intent.data = uri intent.data = uri
......
...@@ -101,6 +101,7 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) { ...@@ -101,6 +101,7 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) {
sentCodeAgain.setOnClickListener { sentCodeAgain.setOnClickListener {
count(true) count(true)
viewModel.resetSmsCode(UserAuth(phone.replace("+", "").replace(" ", "")))
} }
coutdownView.setOnCountdownEndListener { coutdownView.setOnCountdownEndListener {
count(false) count(false)
...@@ -218,6 +219,26 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) { ...@@ -218,6 +219,26 @@ class MyVerificationFragment : BaseFragment(R.layout.fragment_my_verification) {
} }
} }
viewLifecycleOwner.lifecycleScope.launchWhenStarted { viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.resetSmsCodeUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showToastMessage(it.data)
showProgressDialog(false)
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showToastMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.checkResetCodeUiState.collect { viewModel.checkResetCodeUiState.collect {
when (it) { when (it) {
is UiStateObject.SUCCESS -> { is UiStateObject.SUCCESS -> {
......
...@@ -51,6 +51,6 @@ abstract class BaseFragment(private val layoutId: Int) : Fragment() { ...@@ -51,6 +51,6 @@ abstract class BaseFragment(private val layoutId: Int) : Fragment() {
// } // }
protected fun showToastMessage(message:String) { protected fun showToastMessage(message:String) {
Toast.makeText(requireContext(), message, Toast.LENGTH_LONG).show() Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
} }
} }
\ No newline at end of file
...@@ -83,7 +83,7 @@ class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) { ...@@ -83,7 +83,7 @@ class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) {
pinAdapter.setOnDoneListener { pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
delay(50) delay(50)
if (pref.pin_code == it) { if (pref.pinCode == it) {
txtNotPin.isVisible = false txtNotPin.isVisible = false
dismiss() dismiss()
} else { } else {
...@@ -103,7 +103,6 @@ class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) { ...@@ -103,7 +103,6 @@ class FullScreenDialog : DialogFragment(R.layout.fragment_pin_dialog) {
txtNotPin.isVisible = false txtNotPin.isVisible = false
} }
R.id.with_password -> { R.id.with_password -> {
dismiss()
listener?.invoke(true) listener?.invoke(true)
} }
R.id.btn_finger_print -> { R.id.btn_finger_print -> {
......
package com.mobiuz.app.dev.ui.global package com.mobiuz.app.dev.ui.global
import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.databinding.LayoutSenderBinding import com.mobiuz.app.databinding.LayoutSenderBinding
...@@ -37,13 +37,11 @@ class SenderDialog( ...@@ -37,13 +37,11 @@ class SenderDialog(
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
isCancelable = false isCancelable = false
bn.apply { bn.apply {
title.text = txtDescription
image.isVisible = status
if (!status) { if (!status) {
title.text = getString(R.string.error_data) btnOk.text = getString(R.string.login_register)
description.setTextColor(Color.RED)
title.setTextColor(Color.RED)
lottie.setAnimation(R.raw.error_lottie)
} }
description.text = txtDescription
btnOk.setOnClickListener { btnOk.setOnClickListener {
listener?.invoke(Unit) listener?.invoke(Unit)
dismiss() dismiss()
......
...@@ -5,10 +5,11 @@ import android.graphics.Color ...@@ -5,10 +5,11 @@ import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.widget.NestedScrollView
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentHomeBinding import com.mobiuz.app.databinding.FragmentHomeBinding
import com.mobiuz.app.dev.MainViewModel import com.mobiuz.app.dev.MainViewModel
...@@ -16,11 +17,10 @@ import com.mobiuz.app.dev.model.SharedPref ...@@ -16,11 +17,10 @@ import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.network.model.Customer import com.mobiuz.app.dev.network.model.Customer
import com.mobiuz.app.dev.network.model.UiStateObject import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.base.BaseFragment import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.utils.extensions.customLog import com.mobiuz.app.dev.utils.extensions.*
import com.mobiuz.app.dev.utils.extensions.getColorCompat
import com.mobiuz.app.dev.utils.extensions.toMoneyFormat
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import javax.inject.Inject import javax.inject.Inject
...@@ -34,19 +34,23 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { ...@@ -34,19 +34,23 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val viewModel: HomeViewModel by viewModels() private val viewModel: HomeViewModel by viewModels()
private lateinit var mainViewModel: MainViewModel private lateinit var mainViewModel: MainViewModel
private var isProgressing = false
private var isFirstProgressing = true
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var customer: Customer? = null private var customer: Customer? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java] mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
// viewModel.mainIndex() viewModel.mainIndex()
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentHomeBinding.bind(view) _bn = FragmentHomeBinding.bind(view)
val window = requireActivity().window.decorView val window = requireActivity().window.decorView
window.systemUiVisibility = View.VISIBLE window.systemUiVisibility = View.VISIBLE
setUpUI() setUpUI()
collects() collects()
...@@ -55,25 +59,48 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { ...@@ -55,25 +59,48 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
btnAddSum.setOnClickListener {
navController.navigate(R.id.addFragment)
// parentFragmentManager.beginTransaction().replace(R.id.nav_host_fragment,AddCardFragment)
// startActivity(Intent(requireContext()))
}
toolbar.setNavigationOnClickListener { toolbar.setNavigationOnClickListener {
mainViewModel.mainIndex(System.currentTimeMillis()) mainViewModel.mainIndex(System.currentTimeMillis())
} }
nestedScrollView.setOnScrollChangeListener( scrollView.viewTreeObserver.addOnScrollChangedListener {
NestedScrollView.OnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
if (scrollY > 120) {
toolbarInsideLayout.isVisible = true
topDiv.setBackgroundColor(getColorCompat(R.color.primary100))
toolbar.setBackgroundColor(getColorCompat(R.color.primary100))
}
if (scrollY < 100) { if (scrollView.scrollY < 100) {
toolbarInsideLayout.isVisible = false toolbarInsideLayout.isVisible = false
topDiv.setBackgroundColor(Color.TRANSPARENT) topDiv.setBackgroundColor(Color.TRANSPARENT)
toolbar.setBackgroundColor(Color.TRANSPARENT) toolbar.setBackgroundColor(Color.TRANSPARENT)
}
if (scrollView.scrollY > 20) {
toolbar.setBackgroundColor(getColorCompat(R.color.primary100))
topDiv.setBackgroundColor(getColorCompat(R.color.primary100))
}
if (scrollView.scrollY > 100) {
toolbarInsideLayout.isVisible = true
}
}
val decor = OverScrollDecoratorHelper.setUpOverScroll(scrollView)
decor.setOverScrollUpdateListener { _, _, offset ->
if (offset > 150.52632) {
if (!isProgressing) {
vibrate(requireContext())
viewModel.mainIndex()
} }
}) }
if (offset < 1.0) {
lottie.isVisible = false
}
}
} }
} }
...@@ -82,16 +109,24 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { ...@@ -82,16 +109,24 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
viewModel.mainIndexUiState.collect { viewModel.mainIndexUiState.collect {
when (it) { when (it) {
is UiStateObject.SUCCESS -> { is UiStateObject.SUCCESS -> {
isProgressing = false
showProgressDialog(false) showProgressDialog(false)
bn.lottie.isVisible = false
isFirstProgressing = false
customer = it.data customer = it.data
loadData() loadData()
} }
is UiStateObject.ERROR -> { is UiStateObject.ERROR -> {
isProgressing = false
isFirstProgressing = false
showProgressDialog(false) showProgressDialog(false)
// showCustomDialog(it.message,false){} bn.lottie.isVisible = false
} }
is UiStateObject.LOADING -> { is UiStateObject.LOADING -> {
showProgressDialog(true) isProgressing = true
if (isFirstProgressing) showProgressDialog(true)
isFirstProgressing = false
bn.lottie.isVisible = true
} }
else -> Unit else -> Unit
} }
...@@ -102,7 +137,6 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { ...@@ -102,7 +137,6 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun loadData() { private fun loadData() {
try { try {
customLog("customer:$customer")
customer?.customer?.info?.let { customer?.customer?.info?.let {
bn.apply { bn.apply {
txtBalance.text = "${it.balance?.amount?.toMoneyFormat()} ${it.balance?.currency}" txtBalance.text = "${it.balance?.amount?.toMoneyFormat()} ${it.balance?.currency}"
...@@ -118,15 +152,25 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) { ...@@ -118,15 +152,25 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
} }
mainViewModel.setUserName(customer?.customer?.name ?: "Unnamed User") mainViewModel.setUserName(customer?.customer?.name ?: "Unnamed User")
txtTarif.text = customer?.customer?.tarifi?.name ?: getString(R.string.my_tarif) txtTarif.text = customer?.customer?.tarifi?.name ?: getString(R.string.my_tarif)
txtMyNumber.text = pref.userPhone txtMyNumber.text = pref.userPhone.customMasketHome().replace("-", " ")
toolbarMyNumber.text = pref.userPhone toolbarMyNumber.text = pref.userPhone.customMasketHome().replace("-", " ")
} }
} }
} catch (e: Exception) { } catch (e: Exception) {
// showSnackMessage(it.message) // showSnackMessage(it.message)
} }
}
override fun onResume() {
super.onResume()
mainViewModel.bottomSheet(true)
mainViewModel.swipeDrawer(true)
customLog("onResume")
}
override fun onStop() {
super.onStop()
mainViewModel.swipeDrawer(false)
} }
override fun onDestroy() { override fun onDestroy() {
......
...@@ -25,4 +25,6 @@ class HomeViewModel @Inject constructor( ...@@ -25,4 +25,6 @@ class HomeViewModel @Inject constructor(
_mainIndexUiState.value = repository.mainIndex() _mainIndexUiState.value = repository.mainIndex()
} }
suspend fun logOut() = repository.logOut()
} }
\ No newline at end of file
package com.mobiuz.app.dev.ui.service package com.mobiuz.app.dev.ui.service
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.mobiuz.app.databinding.ItemActionBinding import com.mobiuz.app.databinding.ItemActionBinding
import com.mobiuz.app.databinding.ItemUssdBinding import com.mobiuz.app.dev.model.UssdData
import com.mobiuz.app.dev.model.PinData import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.utils.extensions.SingleBlock import com.mobiuz.app.dev.utils.extensions.SingleBlock
import com.mobiuz.app.dev.utils.extensions.getCurrentName
class ActionAdapter : RecyclerView.Adapter<ActionAdapter.VHolder>() { class ActionAdapter(val lang: String) : RecyclerView.Adapter<ActionAdapter.VHolder>() {
private val list: ArrayList<PinData> by lazy { ArrayList() } private val list: ArrayList<UssdData> by lazy { ArrayList() }
private var listener: SingleBlock<String>? = null private var listener: SingleBlock<UssdData>? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VHolder {
return VHolder(ItemActionBinding.inflate(LayoutInflater.from(parent.context))) return VHolder(ItemActionBinding.inflate(LayoutInflater.from(parent.context)))
} }
override fun onBindViewHolder(holder: VHolder, position: Int) = holder.bind(position) override fun onBindViewHolder(holder: VHolder, position: Int) = holder.bind(position)
override fun getItemCount() = 16 override fun getItemCount() = list.size
inner class VHolder(private val binding: ItemActionBinding) : RecyclerView.ViewHolder(binding.root) { inner class VHolder(private val binding: ItemActionBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(position: Int) { fun bind(position: Int) {
itemView.setOnClickListener { val d = list[position]
listener?.invoke("") binding.apply {
title.text = d.title.getCurrentName(lang)
val des = d.short_description.getCurrentName(lang)
description.text = des
description.isVisible = des.isNotEmpty()
code.text = d.code
cardView.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
listener?.invoke(d)
}
})
} }
// val d = list[position]
// binding.imagePin.setImageResource(if (d.count == -1) R.drawable.ic_pin_unchecked else R.drawable.ic_pin_checked)
} }
} }
fun submitList(ls: List<PinData>) { fun submitList(ls: List<UssdData>) {
list.clear() list.clear()
list.addAll(ls) list.addAll(ls)
notifyDataSetChanged() notifyDataSetChanged()
} }
fun setOnClickListener(block: SingleBlock<String>) { fun setOnClickListener(block: SingleBlock<UssdData>) {
listener = block listener = block
} }
......
...@@ -3,24 +3,40 @@ package com.mobiuz.app.dev.ui.service ...@@ -3,24 +3,40 @@ package com.mobiuz.app.dev.ui.service
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.google.gson.Gson
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentActionBinding import com.mobiuz.app.databinding.FragmentActionBinding
import com.mobiuz.app.databinding.FragmentMainUssdBinding
import com.mobiuz.app.dev.MainViewModel import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.model.InnerData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.CONSTANTS
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class ActionFragment : BaseFragment(R.layout.fragment_action) { class ActionFragment : BaseFragment(R.layout.fragment_action) {
@Inject
lateinit var pref: SharedPref
private lateinit var mainViewModel: MainViewModel private lateinit var mainViewModel: MainViewModel
private var _bn: FragmentActionBinding? = null private var _bn: FragmentActionBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val adapter = ActionAdapter() private lateinit var adapter : ActionAdapter
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
adapter = ActionAdapter(pref.language)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java] mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
arguments?.let {
val arg = it.getString(CONSTANTS.SERVICE) ?: ""
if (arg.isNotEmpty()){
val data = Gson().fromJson(arg, InnerData::class.java)
adapter.submitList(data.data)
}
}
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
...@@ -33,10 +49,12 @@ class ActionFragment : BaseFragment(R.layout.fragment_action) { ...@@ -33,10 +49,12 @@ class ActionFragment : BaseFragment(R.layout.fragment_action) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
OverScrollDecoratorHelper.setUpStaticOverScroll(bn.rvUssdCommand, OverScrollDecoratorHelper.ORIENTATION_VERTICAL)
rvUssdCommand.adapter = adapter rvUssdCommand.adapter = adapter
adapter.setOnClickListener { adapter.setOnClickListener {
val dialog = UssdBottomSheetDialog(UssdData("Переход на тариф","Mobi 20","*111*120#","Перейти")) val dialog = UssdBottomSheetDialog(it)
dialog.show(childFragmentManager, "tag") dialog.show(childFragmentManager, "tag")
} }
} }
......
package com.mobiuz.app.dev.ui.service package com.mobiuz.app.dev.ui.service
import android.content.Context import android.Manifest
import android.content.Intent
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.mobiuz.app.R
import com.mobiuz.app.databinding.BottomSheetUssdBinding import com.mobiuz.app.databinding.BottomSheetUssdBinding
import com.mobiuz.app.databinding.FragmentMainUssdBinding import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.model.UssdData
import com.mobiuz.app.dev.ui.global.ButtonClick import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.utils.extensions.getCurrentName
import com.mobiuz.app.utils.checkPermission
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() { class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
@Inject
lateinit var pref: SharedPref
private var _bn: BottomSheetUssdBinding? = null private var _bn: BottomSheetUssdBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private var lng = ""
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_bn = BottomSheetUssdBinding.inflate(inflater) _bn = BottomSheetUssdBinding.inflate(inflater)
...@@ -22,16 +34,23 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() { ...@@ -22,16 +34,23 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = BottomSheetUssdBinding.bind(view) _bn = BottomSheetUssdBinding.bind(view)
lng = pref.language
bn.apply { bn.apply {
data.apply { data.apply {
txtTitle.text = this.title txtTitle.text = this.title.getCurrentName(lng)
txtTarif.text = this.tariff val dec = this.short_description.getCurrentName(lng)
txtDescription.isVisible = dec.isNotEmpty()
txtDescription.text = dec
txtCode.text = this.code txtCode.text = this.code
btnZapros.text = this.text_button // btnZapros.text = this.text_button
} }
btnZapros.setOnClickListener(object : ButtonClick(){ btnZapros.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
dismiss() checkPermission(Manifest.permission.CALL_PHONE) {
val ussd = data.code.replace("#","") + Uri.encode("#")
requireActivity().startActivity(Intent(Intent.ACTION_CALL, Uri.parse("tel:$ussd")))
dismiss()
}
} }
}) })
} }
......
...@@ -8,12 +8,15 @@ import androidx.navigation.NavController ...@@ -8,12 +8,15 @@ import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentLanguageBinding import com.mobiuz.app.databinding.FragmentLanguageBinding
import com.mobiuz.app.dev.MainActivity
import com.mobiuz.app.dev.model.SharedPref import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.LocaleHelper import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.extensions.SingleBlock
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import javax.inject.Inject import javax.inject.Inject
...@@ -37,8 +40,10 @@ class LanguageFragment : BaseFragment(R.layout.fragment_language) { ...@@ -37,8 +40,10 @@ class LanguageFragment : BaseFragment(R.layout.fragment_language) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
// OverScrollDecoratorHelper.setUpStaticOverScroll(bn.viewGroup, OverScrollDecoratorHelper.ORIENTATION_VERTICAL)
toolbar.setNavigationOnClickListener { toolbar.setNavigationOnClickListener {
requireActivity().finish() navController.navigateUp()
} }
bn.apply { bn.apply {
when (pref.language) { when (pref.language) {
...@@ -63,20 +68,18 @@ class LanguageFragment : BaseFragment(R.layout.fragment_language) { ...@@ -63,20 +68,18 @@ class LanguageFragment : BaseFragment(R.layout.fragment_language) {
setLangAndNavigate(CONSTANTS.EN) setLangAndNavigate(CONSTANTS.EN)
} }
}) })
} }
} }
} }
private fun setLangAndNavigate(lang: String) { private fun setLangAndNavigate(lang: String) {
pref.language = lang pref.language = lang
LocaleHelper.setLocale(requireContext()) LocaleHelper.setLocale(requireContext())
val intent = Intent(requireContext(), SettingsActivity::class.java) val intent = Intent(requireContext(), MainActivity::class.java)
intent.putExtra(CONSTANTS.FIRST, CONSTANTS.FIRST)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent) startActivity(intent)
requireActivity().finish() requireActivity().finishAffinity()
} }
override fun collects() { override fun collects() {
......
...@@ -9,6 +9,7 @@ import com.mobiuz.app.databinding.FragmentProfileBinding ...@@ -9,6 +9,7 @@ import com.mobiuz.app.databinding.FragmentProfileBinding
import com.mobiuz.app.dev.model.SharedPref import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.utils.extensions.customMasket
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject import javax.inject.Inject
...@@ -33,8 +34,11 @@ class ProfileFragment : BaseFragment(R.layout.fragment_profile) { ...@@ -33,8 +34,11 @@ class ProfileFragment : BaseFragment(R.layout.fragment_profile) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
txtUserPhone.text = pref.userPhone.customMasket()
txtUserName.text = pref.userName
txtAvatar.text = pref.userName[0].toString()
toolbar.setNavigationOnClickListener { toolbar.setNavigationOnClickListener {
requireActivity().finish() navController.navigateUp()
} }
btn0890.setOnClickListener(object : ButtonClick() { btn0890.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
......
...@@ -11,7 +11,9 @@ import com.mobiuz.app.databinding.FragmentSupportBinding ...@@ -11,7 +11,9 @@ import com.mobiuz.app.databinding.FragmentSupportBinding
import com.mobiuz.app.dev.model.SharedPref import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import javax.inject.Inject import javax.inject.Inject
...@@ -36,42 +38,65 @@ class SupportFragment : BaseFragment(R.layout.fragment_support) { ...@@ -36,42 +38,65 @@ class SupportFragment : BaseFragment(R.layout.fragment_support) {
override fun setUpUI() { override fun setUpUI() {
bn.apply { bn.apply {
toolbar.setNavigationOnClickListener { toolbar.setNavigationOnClickListener {
requireActivity().finish() navController.navigateUp()
} }
OverScrollDecoratorHelper.setUpOverScroll(bn.scrollView)
txtPhone1.text = CONSTANTS.PHONE1
txtPhone2.text = CONSTANTS.PHONE2
txtPhone3.text = CONSTANTS.PHONE3
txtHelpBot.text = CONSTANTS.HELP_BOT
btn0890.setOnClickListener(object : ButtonClick(){ btn0890.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:0890")) actionDial(CONSTANTS.PHONE1)
requireActivity().startActivity(intent)
} }
}) })
btnPhone1.setOnClickListener(object : ButtonClick(){ btnPhone1.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:+998971300909")) actionDial(CONSTANTS.PHONE2.replace(" ",""))
requireActivity().startActivity(intent)
} }
}) })
btnPhone2.setOnClickListener(object : ButtonClick(){ btnPhone2.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:+998972031010")) actionDial(CONSTANTS.PHONE3.replace(" ",""))
requireActivity().startActivity(intent)
} }
}) })
btnHelpBot.setOnClickListener(object : ButtonClick(){ btnHelpBot.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
actionView("https://t.me/${CONSTANTS.HELP_BOT.replace("@","")}")
} }
}) })
btnSentMessage.setOnClickListener(object : ButtonClick(){ btnSentMessage.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
actionView(CONSTANTS.FEEDBACK)
} }
}) })
} }
} }
private fun actionDial(url:String){
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:$url"))
requireActivity().startActivity(intent)
pref.isShowPin = false
}
private fun actionView(url:String){
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse(url)
startActivity(intent)
pref.isShowPin = false
}
override fun collects() { override fun collects() {
} }
override fun onDestroy() { override fun onDestroy() {
_bn = null _bn = null
super.onDestroy() super.onDestroy()
......
package com.mobiuz.app.dev.ui.settings.safety.pin
import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentNewPinBinding
import com.mobiuz.app.databinding.FragmentOldPinBinding
import com.mobiuz.app.databinding.FragmentPinBinding
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.pin.PinAdapter
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.utils.Utils
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
@AndroidEntryPoint
class NewPinFragment : BaseFragment(R.layout.fragment_new_pin) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentNewPinBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentNewPinBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
loadData()
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
rvPin.adapter = pinAdapter
txtNotPin.isVisible = false
pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated {
delay(50)
navController.navigate(R.id.confirmNewPinFragment, bundleOf("pinCode" to it), Utils.navOptions())
}
}
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
for (i in 0 until btnViewGroup.childCount) {
btnViewGroup.getChildAt(i).setOnClickListener {
when (it.id) {
R.id.btn_remove -> {
pinAdapter.removeItem()
}
R.id.btn_forget_pin -> {
}
else -> {
val text = it as TextView
pinAdapter.addItem(text.text.toString().toInt())
}
}
}
}
}
}
private fun loadData() {
data.clear()
for (i in 0..3) {
data.add(PinData(-1))
}
pinAdapter.submitList(data)
}
override fun collects() {
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
package com.mobiuz.app.dev.ui.settings.safety.pin
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentOldPinBinding
import com.mobiuz.app.dev.model.PinData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.auth.pin.PinAdapter
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.getColorCompat
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
@AndroidEntryPoint
class OldPinFragment : BaseFragment(R.layout.fragment_old_pin) {
@Inject
lateinit var pref: SharedPref
private var _bn: FragmentOldPinBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val data = ArrayList<PinData>()
private val pinAdapter = PinAdapter()
private var count = 3
private lateinit var decorView: View
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentOldPinBinding.bind(view)
count = 3
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
loadData()
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
rvPin.adapter = pinAdapter
pinAdapter.setOnDoneListener {
lifecycleScope.launchWhenCreated {
delay(50)
if (pref.pinCode == it) {
navController.navigate(R.id.newPinFragment, null, Utils.navOptions())
} else {
cardPin.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
count--
if(count == 0){
lifecycleScope.launchWhenCreated {
loadError(true)
delay(1000)
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_AUTH, CONSTANTS.LOGIN)
intent.putExtra(CONSTANTS.PHONE, pref.userPhone)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finish()
}
}else{
loadError(true)
}
}
}
}
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
for (i in 0 until btnViewGroup.childCount) {
btnViewGroup.getChildAt(i).setOnClickListener {
when (it.id) {
R.id.btn_remove -> {
loadError(false)
pinAdapter.removeItem()
}
R.id.btn_forget_pin -> {
}
else -> {
loadError(false)
val text = it as TextView
pinAdapter.addItem(text.text.toString().toInt())
}
}
}
}
}
}
private fun loadError(status:Boolean){
bn.apply {
if (count == 0){
errorTitle.text = getString(R.string.impossible_change_pin)
errorText.text = getString(R.string.popitok_error)
}else{
errorText.text = getString(R.string.popitok,count.toString())
}
errorLayout.isVisible = status
div.setBackgroundColor(if(status) getColorCompat(R.color.primary100) else Color.TRANSPARENT)
decorView = requireActivity().window.decorView
decorView.systemUiVisibility = if(status) View.VISIBLE else{decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR}
}
}
private fun loadData() {
data.clear()
for (i in 0..3) {
data.add(PinData(-1))
}
pinAdapter.submitList(data)
}
override fun collects() {
}
override fun onDestroy() {
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
package com.mobiuz.app.dev.utils
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
class NetworkChangeReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val status = NetworkUtil.getConnectivityStatusString(context)
if ("android.net.conn.CONNECTIVITY_CHANGE" == intent.action) {
if (status == NetworkUtil.NETWORK_STATUS_NOT_CONNECTED) {
Log.e("AAA", "NETWORK_STATUS_NOT_CONNECTED")
} else {
Log.e("AAA", "ELSE ")
}
}
}
}
\ No newline at end of file
package com.mobiuz.app.dev.utils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetworkUtil {
public static final int TYPE_WIFI = 1;
public static final int TYPE_MOBILE = 2;
public static final int TYPE_NOT_CONNECTED = 0;
public static final int NETWORK_STATUS_NOT_CONNECTED = 0;
public static final int NETWORK_STATUS_WIFI = 1;
public static final int NETWORK_STATUS_MOBILE = 2;
public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
return TYPE_WIFI;
if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
return TYPE_MOBILE;
}
return TYPE_NOT_CONNECTED;
}
public static int getConnectivityStatusString(Context context) {
int conn = NetworkUtil.getConnectivityStatus(context);
int status = 0;
if (conn == NetworkUtil.TYPE_WIFI) {
status = NETWORK_STATUS_WIFI;
} else if (conn == NetworkUtil.TYPE_MOBILE) {
status = NETWORK_STATUS_MOBILE;
} else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
status = NETWORK_STATUS_NOT_CONNECTED;
}
return status;
}
}
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.mobiuz.app.dev.utils.extensions ...@@ -3,6 +3,7 @@ package com.mobiuz.app.dev.utils.extensions
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Vibrator
import android.text.* import android.text.*
import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan import android.text.style.ClickableSpan
...@@ -20,6 +21,9 @@ import androidx.recyclerview.widget.RecyclerView ...@@ -20,6 +21,9 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputEditText
import com.google.gson.JsonSyntaxException import com.google.gson.JsonSyntaxException
import com.mobiuz.app.R import com.mobiuz.app.R
import com.mobiuz.app.dev.model.UzRuEn
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.ExitDialog
import com.mobiuz.app.dev.ui.global.SenderDialog import com.mobiuz.app.dev.ui.global.SenderDialog
import retrofit2.HttpException import retrofit2.HttpException
...@@ -31,6 +35,13 @@ fun Fragment.showMessage(message: String) { ...@@ -31,6 +35,13 @@ fun Fragment.showMessage(message: String) {
Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
} }
fun Fragment.showCustomDialog(description:String,status:Boolean, block: () -> Unit){
val dialog = SenderDialog(description,status)
dialog.setOnClickListener {
block()
}
dialog.show(childFragmentManager,"tab")
}
fun Activity.showMessage(message: String) { fun Activity.showMessage(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show() Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
} }
...@@ -169,4 +180,70 @@ fun Activity.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable? = Conte ...@@ -169,4 +180,70 @@ fun Activity.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable? = Conte
fun TextInputEditText.clearText(): View { fun TextInputEditText.clearText(): View {
this.text?.clear() this.text?.clear()
return this return this
}
fun String.customMasket():String{
val text = this.replace(" ","")
var new = ""
for (i in text.indices){
if (i == 4){
new += " ("
}
if (i == 6){
new += ") "
}
if (i == 9){
new += "-"
}
if (i == 11){
new += "-"
}
new += text[i]
}
return new
}
fun String.customMasketHome():String{
val text = this.replace(" ","")
var new = ""
for (i in text.indices){
if (i == 4){
new += " "
}
if (i == 6){
new += " "
}
if (i == 9){
new += "-"
}
if (i == 11){
new += "-"
}
new += text[i]
}
return new
}
fun vibrate(context: Context) {
val vibrate = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
vibrate.vibrate(100)
}
fun List<Errors>.getMessage():String{
var message = ""
this.forEach {
message += "${it.message}\n"
}
return message
}
fun UzRuEn.getCurrentName(lang:String):String{
return when(lang){
CONSTANTS.EN -> this.en
CONSTANTS.RU -> this.ru
else -> this.uz
}
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.drawerlayout.widget.DrawerLayout 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" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:fitsSystemWindows="false" android:fitsSystemWindows="false"
tools:openDrawer="start"> tools:openDrawer="start">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:orientation="vertical" android:layout_height="match_parent"
android:layout_height="match_parent"> android:orientation="vertical">
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment" android:id="@+id/nav_host_fragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1" />
/>
<com.google.android.material.bottomnavigation.BottomNavigationView <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav_view" android:id="@+id/bottom_nav_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/white" android:background="@color/white"
app:itemIconSize="24dp"
app:elevation="4dp" app:elevation="4dp"
app:itemIconSize="24dp"
app:itemIconTint="@color/nav_item_tint" app:itemIconTint="@color/nav_item_tint"
app:itemTextColor="@color/nav_item_tint" app:itemTextColor="@color/nav_item_tint"
app:labelVisibilityMode="labeled" app:labelVisibilityMode="labeled"
...@@ -35,9 +35,9 @@ ...@@ -35,9 +35,9 @@
<com.google.android.material.navigation.NavigationView <com.google.android.material.navigation.NavigationView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="false"
android:layout_gravity="start" android:layout_gravity="start"
android:background="@color/white100"> android:background="@color/white100"
android:fitsSystemWindows="false">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -52,170 +52,178 @@ ...@@ -52,170 +52,178 @@
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:background="@color/grey20" android:layout_height="1dp"
android:layout_marginTop="@dimen/_14sdp" android:layout_marginTop="@dimen/_14sdp"
android:layout_height="1dp"/> android:background="@color/grey20" />
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1"> android:layout_weight="1">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:orientation="vertical" android:layout_height="match_parent"
android:layout_height="match_parent"> android:orientation="vertical">
<LinearLayout <LinearLayout
android:id="@+id/btn_safety"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/_24sdp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingVertical="16dp" android:paddingVertical="18dp"
android:paddingStart="30dp" android:paddingStart="30dp"
android:paddingEnd="13dp" android:paddingEnd="13dp">
android:background="?android:selectableItemBackground"
android:id="@+id/btn_safety"
android:layout_marginTop="@dimen/_24sdp"
android:layout_height="match_parent">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:src="@drawable/ic_safety" android:layout_height="wrap_content"
android:layout_height="wrap_content"/> android:src="@drawable/ic_safety" />
<TextView <TextView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/bezopasnost" android:text="@string/bezopasnost"
android:textStyle="bold"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="16dp" android:textStyle="bold" />
android:layout_height="wrap_content"/>
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:src="@drawable/ic_baseline_keyboard_arrow_right" android:src="@drawable/ic_baseline_keyboard_arrow_right" />
android:layout_height="wrap_content"/>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/btn_language"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/_10sdp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingVertical="10dp" android:paddingVertical="10dp"
android:id="@+id/btn_language"
android:paddingStart="30dp" android:paddingStart="30dp"
android:paddingEnd="13dp" android:paddingEnd="13dp">
android:background="?android:selectableItemBackground"
android:layout_marginTop="@dimen/_10sdp"
android:layout_height="match_parent">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:src="@drawable/ic_image_language" android:src="@drawable/ic_image_language" />
android:layout_height="wrap_content"/>
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1" android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_height="wrap_content"> android:layout_weight="1"
android:orientation="vertical">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@string/language_app" android:text="@string/language_app"
android:textStyle="bold"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="16dp" android:textStyle="bold" />
android:layout_height="wrap_content"/>
<TextView <TextView
android:id="@+id/txt_language"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="Русский" android:text="Русский"
android:id="@+id/txt_language"
android:textSize="12sp"
android:textColor="@color/grey80" android:textColor="@color/grey80"
android:layout_marginStart="16dp" android:textSize="12sp" />
android:layout_height="wrap_content"/>
</LinearLayout> </LinearLayout>
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:src="@drawable/ic_baseline_keyboard_arrow_right" android:src="@drawable/ic_baseline_keyboard_arrow_right" />
android:layout_height="wrap_content"/>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/btn_support"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/_10sdp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingVertical="16dp" android:paddingVertical="18dp"
android:id="@+id/btn_support"
android:paddingStart="30dp" android:paddingStart="30dp"
android:paddingEnd="10dp" android:paddingEnd="10dp">
android:background="?android:selectableItemBackground"
android:layout_marginTop="@dimen/_10sdp"
android:layout_height="match_parent">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:src="@drawable/ic_image_support" android:layout_height="wrap_content"
android:layout_height="wrap_content"/> android:src="@drawable/ic_image_support" />
<TextView <TextView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/support" android:text="@string/support"
android:textStyle="bold"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="16dp" android:textStyle="bold" />
android:layout_height="wrap_content"/>
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:src="@drawable/ic_baseline_keyboard_arrow_right" android:src="@drawable/ic_baseline_keyboard_arrow_right" />
android:layout_height="wrap_content"/>
</LinearLayout> </LinearLayout>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:background="@color/grey20" android:layout_height="1dp"
android:layout_marginTop="@dimen/_14sdp" android:layout_marginTop="@dimen/_14sdp"
android:layout_height="1dp"/> android:background="@color/grey20" />
<TextView <TextView
android:id="@+id/txt_redact_data" android:id="@+id/txt_redact_data"
android:ellipsize="end"
android:maxLines="1"
android:background="?android:selectableItemBackground"
android:layout_marginTop="30dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_marginStart="32dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="30dp"
android:background="?android:selectableItemBackground"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/redact_data" android:text="@string/redact_data"
android:textColor="@color/link" android:textColor="@color/link"
android:textSize="14sp" /> android:textSize="14sp" />
<TextView <TextView
android:id="@+id/txt_public_oferta" android:id="@+id/txt_public_oferta"
android:ellipsize="end"
android:maxLines="1"
android:layout_marginTop="12dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:layout_marginTop="12dp"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:layout_height="wrap_content" android:ellipsize="end"
android:maxLines="1"
android:text="@string/public_oferta" android:text="@string/public_oferta"
android:textColor="@color/link" android:textColor="@color/link"
android:textSize="14sp" /> android:textSize="14sp" />
<TextView <TextView
android:id="@+id/txt_confidensialnost" android:id="@+id/txt_confidensialnost"
android:ellipsize="end"
android:maxLines="1"
android:layout_marginTop="12dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_marginStart="32dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="20dp" android:layout_marginBottom="20dp"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/txt_confidensialnost" android:text="@string/txt_confidensialnost"
android:textColor="@color/link" android:textColor="@color/link"
android:textSize="14sp" /> android:textSize="14sp" />
...@@ -224,15 +232,15 @@ ...@@ -224,15 +232,15 @@
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
<LinearLayout <LinearLayout
android:id="@+id/btn_exit"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingVertical="16dp"
android:paddingStart="30dp"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:paddingEnd="10dp"
android:id="@+id/btn_exit"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:orientation="horizontal"> android:orientation="horizontal"
android:paddingVertical="16dp"
android:paddingStart="30dp"
android:paddingEnd="10dp">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -243,11 +251,11 @@ ...@@ -243,11 +251,11 @@
<TextView <TextView
android:id="@+id/txt_user_name" android:id="@+id/txt_user_name"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginStart="12dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/exit"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:text="@string/exit"
android:textSize="20sp" android:textSize="20sp"
android:textStyle="bold" /> android:textStyle="bold" />
...@@ -255,9 +263,9 @@ ...@@ -255,9 +263,9 @@
android:id="@+id/txt_user_phone" android:id="@+id/txt_user_phone"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="v 0.01.1" android:text="v 0.01.1"
android:textColor="@color/grey80" android:textColor="@color/grey80"
android:layout_gravity="center"
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
...@@ -266,5 +274,4 @@ ...@@ -266,5 +274,4 @@
</com.google.android.material.navigation.NavigationView> </com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout> </androidx.drawerlayout.widget.DrawerLayout>
...@@ -5,15 +5,26 @@ ...@@ -5,15 +5,26 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="center" android:layout_gravity="center"
android:background="@drawable/bgn_splash" android:background="@drawable/bgn_splash"
android:gravity="center"
android:fitsSystemWindows="false" android:fitsSystemWindows="false"
android:gravity="center"
android:orientation="vertical"
tools:context=".dev.SplashActivity"> tools:context=".dev.SplashActivity">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_mobiuz_logo" android:layout_gravity="center"
android:layout_marginBottom="@dimen/_58sdp" android:layout_marginBottom="@dimen/_58sdp"
android:src="@drawable/ic_mobiuz_logo"
android:textStyle="bold" /> android:textStyle="bold" />
<Button
android:id="@+id/btn_try_again"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_24sdp"
android:text="Try Again"
android:visibility="gone"
android:textColor="@color/white100" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:fitsSystemWindows="false"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:id="@+id/div"
android:background="@android:color/transparent"
android:layout_height="24dp"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationIcon="@drawable/ic_baseline_arrow_back" />
<LinearLayout
android:layout_width="match_parent"
android:gravity="center"
android:visibility="invisible"
android:id="@+id/error_layout"
android:orientation="vertical"
android:background="@color/primary100"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:textColor="@color/white100"
android:id="@+id/error_title"
android:layout_height="wrap_content"
android:text="@string/pin_not_same"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
</FrameLayout>
<TextView
android:id="@+id/txt_enter_pin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_14sdp"
android:layout_marginTop="@dimen/_14sdp"
android:text="@string/confirm_new_pin"
android:textSize="29sp"
android:textStyle="bold" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.8">
<LinearLayout
android:layout_width="@dimen/_100sdp"
android:layout_gravity="center"
android:orientation="vertical"
android:gravity="center"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/card_pin"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_height="wrap_content"
app:cardCornerRadius="0dp"
android:minWidth="@dimen/_100sdp"
android:minHeight="@dimen/_32sdp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pin"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="4"
tools:listitem="@layout/item_pin" />
</com.google.android.material.card.MaterialCardView>
<View
android:layout_width="@dimen/_120sdp"
android:background="@color/grey30"
android:layout_height="2dp"/>
</LinearLayout>
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/btn_view_group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:paddingStart="@dimen/_44sdp"
android:paddingEnd="@dimen/_44sdp">
<TextView
android:id="@+id/btn_1"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_2"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_2"
app:layout_constraintEnd_toStartOf="@id/btn_3"
app:layout_constraintStart_toEndOf="@id/btn_1"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_3"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_4"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_1" />
<TextView
android:id="@+id/btn_5"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_5"
app:layout_constraintEnd_toStartOf="@id/btn_6"
app:layout_constraintStart_toEndOf="@id/btn_4"
app:layout_constraintTop_toTopOf="@id/btn_4" />
<TextView
android:id="@+id/btn_6"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_4" />
<TextView
android:id="@+id/btn_7"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_4" />
<TextView
android:id="@+id/btn_8"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_8"
app:layout_constraintEnd_toStartOf="@id/btn_9"
app:layout_constraintStart_toEndOf="@id/btn_7"
app:layout_constraintTop_toTopOf="@id/btn_7" />
<TextView
android:id="@+id/btn_9"
style="@style/BtnStyle"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_7" />
<TextView
android:id="@+id/btn_0"
style="@style/BtnStyle"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/bgn_pin_btn"
android:text="@string/_0"
app:layout_constraintEnd_toEndOf="@id/btn_8"
app:layout_constraintStart_toStartOf="@id/btn_8"
app:layout_constraintTop_toBottomOf="@id/btn_7" />
<ImageView
android:id="@+id/btn_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/remove"
android:padding="@dimen/_4sdp"
android:src="@drawable/ic_vector_remove"
app:layout_constraintBottom_toBottomOf="@id/btn_0"
app:layout_constraintEnd_toEndOf="@id/btn_9"
app:layout_constraintStart_toStartOf="@id/btn_9"
app:layout_constraintTop_toTopOf="@id/btn_0" />
<TextView
android:layout_width="match_parent"
app:layout_constraintTop_toBottomOf="@id/btn_0"
android:text="@string/forget_pin"
android:gravity="center"
android:paddingVertical="12dp"
android:textSize="14sp"
android:background="?android:selectableItemBackground"
android:textStyle="bold"
android:id="@+id/btn_forget_pin"
android:layout_marginTop="@dimen/_20sdp"
android:textColor="@color/primary100"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:layout_width="match_parent" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:fitsSystemWindows="false" android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"> android:layout_height="match_parent"
android:fitsSystemWindows="false">
<ImageView <ImageView
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
android:orientation="vertical"> android:orientation="vertical">
<View <View
android:layout_width="match_parent"
android:id="@+id/top_div" android:id="@+id/top_div"
android:background="@android:color/transparent" android:layout_width="match_parent"
android:layout_height="24dp"/> android:layout_height="24dp"
android:background="@android:color/transparent" />
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
...@@ -31,12 +31,12 @@ ...@@ -31,12 +31,12 @@
<LinearLayout <LinearLayout
android:id="@+id/toolbar_inside_layout" android:id="@+id/toolbar_inside_layout"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_gravity="start" android:layout_gravity="start"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:orientation="vertical"> android:orientation="vertical"
android:visibility="invisible">
<TextView <TextView
android:id="@+id/toolbar_my_number_helper" android:id="@+id/toolbar_my_number_helper"
...@@ -56,324 +56,347 @@ ...@@ -56,324 +56,347 @@
</LinearLayout> </LinearLayout>
</com.google.android.material.appbar.MaterialToolbar> </com.google.android.material.appbar.MaterialToolbar>
<FrameLayout
<androidx.core.widget.NestedScrollView
android:id="@+id/nestedScrollView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1"> android:layout_weight="1">
<LinearLayout <com.airbnb.lottie.LottieAnimationView
android:layout_width="@dimen/_90sdp"
android:layout_height="@dimen/_90sdp"
android:adjustViewBounds="true"
app:lottie_autoPlay="true"
android:id="@+id/lottie"
android:visibility="invisible"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/_24sdp"
app:lottie_loop="true"
app:lottie_rawRes="@raw/rifki_loading"
app:lottie_speed="1"
tools:ignore="ContentDescription" />
<ScrollView
android:id="@+id/scrollView"
android:clipToPadding="true"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent">
android:orientation="vertical">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:orientation="vertical">
android:layout_marginStart="12dp"
android:layout_marginTop="@dimen/_6sdp"
android:layout_marginBottom="@dimen/_6sdp">
<com.makeramen.roundedimageview.RoundedImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:src="@drawable/ic_photo"
app:riv_corner_radius="14dp" />
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="10dp" android:layout_marginStart="12dp"
android:orientation="vertical"> android:layout_marginTop="@dimen/_6sdp"
android:layout_marginBottom="@dimen/_6sdp">
<TextView <com.makeramen.roundedimageview.RoundedImageView
android:layout_width="wrap_content" android:layout_width="40dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:text="@string/my_number" android:layout_gravity="center"
android:textColor="@color/white100" /> android:src="@drawable/ic_photo"
app:riv_corner_radius="14dp" />
<TextView <LinearLayout
android:id="@+id/txt_my_number"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="@color/white" android:layout_gravity="center"
android:textSize="16sp" android:layout_marginStart="10dp"
android:textStyle="bold" android:orientation="vertical">
tools:text="+998 97 980 25 52" />
</LinearLayout>
</LinearLayout>
<FrameLayout <TextView
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom" android:text="@string/my_number"
android:layout_marginTop="@dimen/_12sdp" android:textColor="@color/white100" />
android:paddingHorizontal="16dp">
<LinearLayout <TextView
android:layout_width="wrap_content" android:id="@+id/txt_my_number"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:orientation="vertical"> android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="+998 97 980 25 52" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/balance"
android:textColor="@color/white100" />
<TextView
android:id="@+id/txt_balance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0 UZS"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout> </LinearLayout>
<ImageView <FrameLayout
android:id="@+id/btn_add_sum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_plus" />
</FrameLayout>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_10sdp"
android:layout_marginTop="@dimen/_12sdp"
app:cardCornerRadius="4dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:layout_gravity="bottom"
android:layout_marginTop="@dimen/_12sdp"
android:paddingHorizontal="16dp">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:orientation="vertical">
android:layout_marginTop="12dp"
android:paddingHorizontal="@dimen/_12sdp">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/my_tarif" android:text="@string/balance"
android:id="@+id/txt_tarif" android:textColor="@color/white100" />
android:textSize="20sp"
android:textStyle="bold" />
<TextView <TextView
android:layout_width="0dp" android:id="@+id/txt_balance"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:text="0 UZS"
android:layout_weight="1" android:textColor="@color/white"
android:gravity="end" android:textSize="20sp"
android:text="0 Сум/мес" android:textStyle="bold" />
android:textColor="@color/grey70"
android:textSize="14sp" />
</LinearLayout> </LinearLayout>
<View <ImageView
android:layout_width="match_parent" android:id="@+id/btn_add_sum"
android:layout_height="1dp"
android:layout_marginTop="16dp"
android:background="@color/grey20" />
<TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="end"
android:layout_marginTop="10dp" android:background="?selectableItemBackgroundBorderless"
android:text="@string/oatatok_tarifu" android:src="@drawable/ic_plus" />
android:textColor="@color/grey70" />
</FrameLayout>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_10sdp"
android:layout_marginTop="@dimen/_12sdp"
app:cardCornerRadius="4dp"
app:cardElevation="4dp">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"> android:orientation="vertical">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_gravity="center"
android:orientation="vertical"> android:layout_marginTop="12dp"
android:paddingHorizontal="@dimen/_12sdp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_wi_fi" />
<TextView <TextView
android:id="@+id/txt_count_mb" android:id="@+id/txt_tarif"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:text="@string/my_tarif"
android:layout_marginVertical="6dp"
android:text="0"
android:textSize="20sp" android:textSize="20sp"
android:textStyle="bold" /> android:textStyle="bold" />
<TextView <TextView
android:id="@+id/txt_type_mb" android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:text="mb" android:layout_weight="1"
android:textColor="@color/black80" /> android:gravity="end"
android:text="0 Сум/мес"
android:textColor="@color/grey70"
android:textSize="14sp" />
</LinearLayout> </LinearLayout>
<View <View
android:layout_width="1dp" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="1dp"
android:layout_marginTop="16dp"
android:background="@color/grey20" /> android:background="@color/grey20" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:text="@string/oatatok_tarifu"
android:textColor="@color/grey70" />
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_marginTop="16dp">
android:orientation="vertical">
<ImageView <LinearLayout
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_weight="1"
android:src="@drawable/ic_phone" /> android:orientation="vertical">
<TextView <ImageView
android:id="@+id/txt_count_minut" android:layout_width="wrap_content"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_wi_fi" />
<TextView
android:id="@+id/txt_count_mb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="6dp"
android:text="0"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_type_mb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="mb"
android:textColor="@color/black80" />
</LinearLayout>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/grey20" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_weight="1"
android:layout_marginVertical="6dp" android:orientation="vertical">
android:text="0"
android:textSize="20sp" <ImageView
android:textStyle="bold" /> android:layout_width="wrap_content"
android:layout_height="wrap_content"
<TextView android:layout_gravity="center"
android:id="@+id/txt_type_minut" android:src="@drawable/ic_phone" />
android:layout_width="wrap_content"
<TextView
android:id="@+id/txt_count_minut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="6dp"
android:text="0"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_type_minut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="min"
android:textColor="@color/black80" />
</LinearLayout>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/grey20" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_weight="1"
android:text="min" android:orientation="vertical">
android:textColor="@color/black80" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_message" />
<TextView
android:id="@+id/txt_count_sms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="6dp"
android:text="0"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_type_sms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="SMS"
android:textColor="@color/black80" />
</LinearLayout>
</LinearLayout> </LinearLayout>
<View <View
android:layout_width="1dp" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="1dp"
android:layout_marginTop="16dp"
android:background="@color/grey20" /> android:background="@color/grey20" />
<LinearLayout <FrameLayout
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_marginTop="16dp"
android:orientation="vertical"> android:layout_marginBottom="16dp"
android:paddingHorizontal="@dimen/_12sdp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_message" />
<TextView <TextView
android:id="@+id/txt_count_sms"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:text="@string/next_spisanie"
android:layout_marginVertical="6dp" android:textColor="@color/grey70"
android:text="0" android:textSize="14sp" />
android:textSize="20sp"
android:textStyle="bold" />
<TextView <TextView
android:id="@+id/txt_type_sms"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="end"
android:text="SMS" tools:text="22 Декабря" />
android:textColor="@color/black80" /> </FrameLayout>
</LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<View <include
android:layout_width="match_parent" layout="@layout/item_home"
android:layout_height="1dp" android:layout_width="match_parent"
android:layout_marginTop="16dp" android:layout_height="@dimen/_150sdp"
android:background="@color/grey20" /> android:layout_marginHorizontal="12dp"
android:layout_marginTop="@dimen/_16sdp" />
<FrameLayout <ImageView
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_gravity="center"
android:layout_marginBottom="16dp" android:layout_marginHorizontal="12dp"
android:paddingHorizontal="@dimen/_12sdp"> android:layout_marginTop="@dimen/_8sdp"
android:layout_marginBottom="@dimen/_20sdp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_group_12" />
<TextView <include
android:layout_width="wrap_content" layout="@layout/item_home"
android:layout_height="wrap_content" android:layout_width="match_parent"
android:text="@string/next_spisanie" android:layout_height="@dimen/_150sdp"
android:textColor="@color/grey70" android:layout_marginHorizontal="12dp"
android:textSize="14sp" /> android:layout_marginTop="@dimen/_16sdp" />
<TextView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end" android:layout_gravity="center"
tools:text="22 Декабря" /> android:layout_marginHorizontal="12dp"
</FrameLayout> android:layout_marginTop="@dimen/_8sdp"
</LinearLayout> android:layout_marginBottom="@dimen/_20sdp"
</com.google.android.material.card.MaterialCardView> android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_group_12" />
<include
layout="@layout/item_home"
android:layout_width="match_parent"
android:layout_height="@dimen/_150sdp"
android:layout_marginHorizontal="12dp"
android:layout_marginTop="@dimen/_16sdp" />
<ImageView </LinearLayout>
android:layout_width="wrap_content" </ScrollView>
android:layout_height="wrap_content" </FrameLayout>
android:layout_gravity="center"
android:layout_marginHorizontal="12dp"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginBottom="@dimen/_20sdp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_group_12" />
<include
layout="@layout/item_home"
android:layout_width="match_parent"
android:layout_height="@dimen/_150sdp"
android:layout_marginHorizontal="12dp"
android:layout_marginTop="@dimen/_16sdp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="12dp"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginBottom="@dimen/_20sdp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_group_12" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout> </LinearLayout>
</FrameLayout> </FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?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" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical">
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
app:title="@string/language_app"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:navigationIcon="@drawable/ic_baseline_arrow_back" app:navigationIcon="@drawable/ic_baseline_arrow_back"
/> app:title="@string/language_app" />
<LinearLayout <LinearLayout
android:id="@+id/uzbek_lang" android:id="@+id/uzbek_lang"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="27dp" android:layout_marginTop="27dp"
android:paddingHorizontal="@dimen/_16sdp"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:paddingHorizontal="@dimen/_16sdp"
android:paddingVertical="@dimen/_12sdp"> android:paddingVertical="@dimen/_12sdp">
<ImageView <ImageView
...@@ -31,30 +30,30 @@ ...@@ -31,30 +30,30 @@
<TextView <TextView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp" android:layout_marginStart="@dimen/_12sdp"
android:layout_weight="1"
android:text="@string/uzbek" android:text="@string/uzbek"
android:textStyle="bold"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="16sp" /> android:textSize="16sp"
android:textStyle="bold" />
<ImageView <ImageView
android:layout_width="wrap_content"
android:layout_gravity="center"
android:visibility="invisible"
android:id="@+id/image_uzbek" android:id="@+id/image_uzbek"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_vector_checked" /> android:layout_gravity="center"
android:src="@drawable/ic_vector_checked"
android:visibility="invisible" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/russian_lang" android:id="@+id/russian_lang"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/_16sdp"
android:layout_marginVertical="@dimen/_12sdp" android:layout_marginVertical="@dimen/_12sdp"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:paddingHorizontal="@dimen/_16sdp"
android:paddingVertical="@dimen/_12sdp"> android:paddingVertical="@dimen/_12sdp">
<ImageView <ImageView
...@@ -64,28 +63,29 @@ ...@@ -64,28 +63,29 @@
<TextView <TextView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp" android:layout_marginStart="@dimen/_12sdp"
android:layout_weight="1"
android:text="@string/russian" android:text="@string/russian"
android:textStyle="bold"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="16sp" /> android:textSize="16sp"
android:textStyle="bold" />
<ImageView <ImageView
android:layout_width="wrap_content"
android:layout_gravity="center"
android:visibility="invisible"
android:id="@+id/image_russian" android:id="@+id/image_russian"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_vector_checked" /> android:layout_gravity="center"
android:src="@drawable/ic_vector_checked"
android:visibility="invisible" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/english_lang" android:id="@+id/english_lang"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/_16sdp"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:paddingHorizontal="@dimen/_16sdp"
android:paddingVertical="@dimen/_12sdp"> android:paddingVertical="@dimen/_12sdp">
<ImageView <ImageView
...@@ -95,20 +95,22 @@ ...@@ -95,20 +95,22 @@
<TextView <TextView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp" android:layout_marginStart="@dimen/_12sdp"
android:layout_weight="1"
android:text="@string/english" android:text="@string/english"
android:textStyle="bold"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="16sp" /> android:textSize="16sp"
android:textStyle="bold" />
<ImageView <ImageView
android:id="@+id/image_english"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="invisible" android:layout_gravity="center"
android:id="@+id/image_english" android:src="@drawable/ic_vector_checked"
android:src="@drawable/ic_vector_checked" /> android:visibility="invisible" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:id="@+id/view_group"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
......
...@@ -15,13 +15,13 @@ ...@@ -15,13 +15,13 @@
android:layout_marginStart="@dimen/_14sdp" android:layout_marginStart="@dimen/_14sdp"
android:layout_marginTop="@dimen/_34sdp" android:layout_marginTop="@dimen/_34sdp"
android:text="@string/enter_pin_code" android:text="@string/enter_pin_code"
android:textSize="@dimen/_16sdp" android:textSize="29sp"
android:textStyle="bold" /> android:textStyle="bold" />
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="0.9"> android:layout_weight="0.8">
<TextView <TextView
android:id="@+id/txt_not_pin" android:id="@+id/txt_not_pin"
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:cardCornerRadius="0dp" app:cardCornerRadius="0dp"
android:minWidth="@dimen/_120sdp" android:minWidth="@dimen/_110sdp"
android:minHeight="@dimen/_32sdp"> android:minHeight="@dimen/_32sdp">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
tools:listitem="@layout/item_pin" /> tools:listitem="@layout/item_pin" />
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
<View <View
android:layout_width="@dimen/_120sdp" android:layout_width="@dimen/_110sdp"
android:background="@color/grey30" android:background="@color/grey30"
android:layout_height="2dp"/> android:layout_height="2dp"/>
</LinearLayout> </LinearLayout>
......
...@@ -3,11 +3,14 @@ ...@@ -3,11 +3,14 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:fitsSystemWindows="false"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_marginTop="24dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:navigationIcon="@drawable/ic_baseline_arrow_back" app:navigationIcon="@drawable/ic_baseline_arrow_back"
app:title="@string/profile" /> app:title="@string/profile" />
...@@ -21,21 +24,28 @@ ...@@ -21,21 +24,28 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<ImageView <TextView
android:layout_width="84dp" android:layout_width="84dp"
android:layout_height="84dp" android:layout_height="84dp"
android:text="Ю"
android:id="@+id/txt_avatar"
android:gravity="center"
android:textSize="24sp"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="20dp" android:background="@drawable/bgn_avatar"
android:src="@drawable/ic_user" /> android:layout_marginTop="20dp" />
<TextView <TextView
android:id="@+id/txt_user_name" android:id="@+id/txt_user_name"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:gravity="center"
android:elevation="8dp"
android:layout_marginHorizontal="@dimen/_24sdp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:text="Юлия Шевченко " tools:text="Юлия Шевченко "
android:textSize="29sp" android:textSize="25sp"
android:textStyle="bold" /> android:textStyle="bold" />
<TextView <TextView
...@@ -43,22 +53,25 @@ ...@@ -43,22 +53,25 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="8dp" android:layout_marginTop="15dp"
android:text="@string/my_number" android:text="@string/my_number"
android:textColor="@color/grey70" android:textColor="@color/grey70"
android:textSize="16sp" /> android:textSize="16sp" />
<com.google.android.material.button.MaterialButton <TextView
android:id="@+id/txt_user_phone" android:id="@+id/txt_user_phone"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="12dp" android:layout_marginTop="16dp"
android:paddingHorizontal="@dimen/_16sdp" android:textStyle="bold"
android:paddingVertical="12dp" android:translationZ="@dimen/_10sdp"
android:background="@drawable/bgn_user_phone"
android:textColor="@color/white100"
android:paddingHorizontal="18dp"
android:paddingVertical="10dp"
android:text="+998 97 999-99-99" android:text="+998 97 999-99-99"
android:textSize="14sp" android:textSize="15sp" />
app:backgroundTint="@color/primary100" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -85,7 +98,7 @@ ...@@ -85,7 +98,7 @@
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp" android:layout_marginStart="12dp"
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
...@@ -101,9 +114,9 @@ ...@@ -101,9 +114,9 @@
android:text="31.12.1999" android:text="31.12.1999"
android:textColor="@color/black100" android:textColor="@color/black100"
android:textSize="15sp" android:textSize="15sp"
android:layout_marginTop="4dp"
android:textStyle="bold" /> android:textStyle="bold" />
</LinearLayout> </LinearLayout>
...@@ -114,6 +127,7 @@ ...@@ -114,6 +127,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:visibility="invisible"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:paddingHorizontal="@dimen/_16sdp" android:paddingHorizontal="@dimen/_16sdp"
android:paddingVertical="@dimen/_10sdp"> android:paddingVertical="@dimen/_10sdp">
...@@ -153,6 +167,7 @@ ...@@ -153,6 +167,7 @@
android:id="@+id/btn_sim" android:id="@+id/btn_sim"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:paddingHorizontal="@dimen/_16sdp" android:paddingHorizontal="@dimen/_16sdp"
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:id="@+id/view_group"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"> android:orientation="vertical">
......
...@@ -7,11 +7,16 @@ ...@@ -7,11 +7,16 @@
android:paddingHorizontal="@dimen/_12sdp" android:paddingHorizontal="@dimen/_12sdp"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<ImageView <TextView
android:layout_width="84dp" android:layout_width="84dp"
android:src="@drawable/ic_user" android:layout_height="84dp"
android:layout_marginTop="20dp" android:text="Ю"
android:layout_height="84dp"/> android:id="@+id/txt_avatar"
android:gravity="center"
android:textSize="24sp"
android:layout_gravity="start"
android:background="@drawable/bgn_avatar"
android:layout_marginTop="20dp" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:id="@+id/txt_user_name" android:id="@+id/txt_user_name"
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android" <com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardCornerRadius="12dp" app:cardCornerRadius="6dp"
app:cardUseCompatPadding="true" app:cardUseCompatPadding="true"
android:layout_marginHorizontal="@dimen/_16sdp"
app:cardBackgroundColor="@color/white" app:cardBackgroundColor="@color/white"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content" android:layout_width="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:clickable="true" android:clickable="true"
android:minWidth="@dimen/_230sdp" android:minWidth="@dimen/_230sdp"
android:focusable="true" android:focusable="true"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<com.airbnb.lottie.LottieAnimationView <ImageView
android:layout_width="80dp" android:layout_width="@dimen/_70sdp"
android:id="@+id/lottie" android:id="@+id/image"
android:layout_height="80dp" android:src="@drawable/icon_famale"
android:layout_height="@dimen/_70sdp"
android:adjustViewBounds="true" android:adjustViewBounds="true"
app:lottie_autoPlay="true"
android:layout_gravity="center" android:layout_gravity="center"
app:lottie_loop="true" android:layout_marginTop="36dp"
android:layout_marginTop="16dp"
app:lottie_rawRes="@raw/success_lottie"
app:lottie_speed="1"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
...@@ -34,41 +32,28 @@ ...@@ -34,41 +32,28 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:gravity="center" android:gravity="center"
android:textSize="16sp" android:textSize="24sp"
android:id="@+id/title" android:id="@+id/title"
android:textStyle="bold" android:textStyle="bold"
android:layout_marginTop="24dp"
android:layout_marginHorizontal="26dp" android:layout_marginHorizontal="26dp"
android:text="@string/successfully" android:text="@string/successfully"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textSize="16sp"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:id="@+id/description"
android:layout_marginHorizontal="26dp"
android:text="description"
android:layout_height="wrap_content"/>
<View
android:layout_width="match_parent"
android:background="@color/grey20"
android:layout_height="1dp"/>
<TextView <Button
style="@style/ButtonPrimary"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:id="@+id/btn_ok" android:id="@+id/btn_ok"
android:textSize="14sp" android:textSize="14sp"
android:layout_margin="24dp"
android:textStyle="bold" android:textStyle="bold"
android:elevation="2dp" android:elevation="2dp"
android:paddingVertical="16dp" android:paddingVertical="16dp"
android:gravity="center" android:gravity="center"
android:text="@string/ok"/> android:text="@string/close_process"/>
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
\ No newline at end of file
...@@ -11,4 +11,50 @@ ...@@ -11,4 +11,50 @@
android:label="fragment_home" android:label="fragment_home"
tools:layout="@layout/fragment_home" /> tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/addFragment"
android:name="uz.agr.delta.ui.card.add.AddCardFragment"
android:label="fragment_add"
tools:layout="@layout/agr_fragment_add_card" />
<fragment
android:id="@+id/languageFragment"
android:name="com.mobiuz.app.dev.ui.settings.LanguageFragment"
android:label="fragment_language"
tools:layout="@layout/fragment_language" />
<fragment
android:id="@+id/supportFragment"
tools:layout="@layout/fragment_support"
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:label="fragment_safety"
tools:layout="@layout/fragment_safety" />
<fragment
android:id="@+id/profileFragment"
android:name="com.mobiuz.app.dev.ui.settings.ProfileFragment"
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" />
<fragment
android:id="@+id/currentPasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.password.ChangePasswordFragment"
android:label="CurrentPasswordFragment" />
<fragment
android:id="@+id/oldPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.OldPinFragment"
android:label="OldPinFragment" />
<fragment
android:id="@+id/newPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.NewPinFragment"
android:label="NewPinFragment" />
<fragment
android:id="@+id/confirmNewPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.ConfirmNewPinFragment"
android:label="ConfirmNewPinFragment" />
</navigation> </navigation>
\ No newline at end of file
...@@ -2,13 +2,55 @@ ...@@ -2,13 +2,55 @@
<navigation xmlns:android="http://schemas.android.com/apk/res/android" <navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/motionFragment" app:startDestination="@id/serviceFragment"
android:id="@+id/nav_graph_profile"> android:id="@+id/nav_graph_profile">
<fragment <fragment
android:id="@+id/motionFragment" android:id="@+id/serviceFragment"
tools:layout="@layout/fragment_service" tools:layout="@layout/fragment_service"
android:name="com.mobiuz.app.dev.ui.service.ServiceFragment" android:name="com.mobiuz.app.dev.ui.service.ServiceFragment"
android:label="MotionFragment" /> android:label="MotionFragment" />
<fragment
android:id="@+id/servicesFragmentActivity"
android:name="com.mobiuz.app.dev.ui.service.ServicesFragmentActivity"
android:label="ServicesFragmentActivity" />
<fragment
android:id="@+id/languageFragment"
android:name="com.mobiuz.app.dev.ui.settings.LanguageFragment"
android:label="fragment_language"
tools:layout="@layout/fragment_language" />
<fragment
android:id="@+id/supportFragment"
tools:layout="@layout/fragment_support"
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:label="fragment_safety"
tools:layout="@layout/fragment_safety" />
<fragment
android:id="@+id/profileFragment"
android:name="com.mobiuz.app.dev.ui.settings.ProfileFragment"
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" />
<fragment
android:id="@+id/currentPasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.password.ChangePasswordFragment"
android:label="CurrentPasswordFragment" />
<fragment
android:id="@+id/oldPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.OldPinFragment"
android:label="OldPinFragment" />
<fragment
android:id="@+id/newPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.NewPinFragment"
android:label="NewPinFragment" />
<fragment
android:id="@+id/confirmNewPinFragment"
android:name="com.mobiuz.app.dev.ui.settings.safety.pin.ConfirmNewPinFragment"
android:label="ConfirmNewPinFragment" />
</navigation> </navigation>
\ No newline at end of file
...@@ -103,5 +103,30 @@ ...@@ -103,5 +103,30 @@
<string name="enter_new_password">Введите новый пароль</string> <string name="enter_new_password">Введите новый пароль</string>
<string name="enter_confirm_new_password">Для подтверждения введите новый пароль ещё раз</string> <string name="enter_confirm_new_password">Для подтверждения введите новый пароль ещё раз</string>
<string name="password_changed">Пароль изменен</string> <string name="password_changed">Пароль изменен</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>
<string name="popitok">Осталось %1$s попытки</string>
<string name="impossible_change_pin">Смена ПИН кода невозможна</string>
<string name="popitok_error">Вы ввели неправильный PIN код 3 раза</string>
<string name="pin_code_updated">Пин-код успешно обновлен</string>
<string name="for_abonent">Для абонентов</string>
<string name="all_nomer">Со всех номеров</string>
<string name="contact_us">Связь с нами</string>
<string name="telegram_bot">Телеграм бот</string>
<string name="email">Email</string>
<string name="send_an_appeal">Отправить обращение</string>
<string name="your_opinion_matters">Ваше мнение имеет значение</string>
<string name="biometric_enabled">Biometric enabled</string>
<string name="biometric_disabled">Biometric disabled</string>
<string name="password_updated">Password Successfully Updated</string>
<string name="wrong_password">Неверный Пароль</string>
<string name="impossible_change_password">Замена пароля невозможна</string>
<string name="login_register">Авторизация/Регистрация</string>
<string name="close_process">Закрыть</string>
<string name="popitok_error_password">Вы ввели неправильный пароль 3 раза</string>
<string name="settings_safety">Настройки безопасности действуют только для основного номера +998 97 999-99-99</string>
</resources> </resources>
\ No newline at end of file
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<item name="colorPrimaryDark">@android:color/transparent</item> <item name="colorPrimaryDark">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentStatus">true</item>
<item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>
<!-- Secondary brand color. --> <!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item> <item name="colorSecondary">@color/teal_200</item>
...@@ -33,6 +34,11 @@ ...@@ -33,6 +34,11 @@
<item name="android:background">@drawable/radius_top</item> <item name="android:background">@drawable/radius_top</item>
</style> </style>
<style name="WindowAnimationStyle">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
<style name="ProgressDialogTheme" parent="ThemeOverlay.AppCompat.Dialog"> <style name="ProgressDialogTheme" parent="ThemeOverlay.AppCompat.Dialog">
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
</style> </style>
...@@ -52,6 +58,14 @@ ...@@ -52,6 +58,14 @@
<item name="android:textSize">17sp</item> <item name="android:textSize">17sp</item>
<item name="android:background">@drawable/button_selector</item> <item name="android:background">@drawable/button_selector</item>
<item name="textAllCaps">false</item> <item name="textAllCaps">false</item>
</style>
<style name="BiometricButtonPrimary" parent="Widget.AppCompat.Button">
<item name="android:textColor">@color/primary100</item>
<item name="android:textSize">16sp</item>
<item name="android:textStyle">bold</item>
<item name="android:background">@drawable/btn_biometric_bgn</item>
<item name="textAllCaps">false</item>
</style> </style>
......
dependencyResolutionManagement { /*dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories { repositories {
flatDir {
dirs 'aars'
}
maven { url "https://maven.google.com" }
google() google()
mavenCentral() mavenCentral()
jcenter() // Warning: this repository is going to shut down soon jcenter() // Warning: this repository is going to shut down soon
} }
}
}*/
rootProject.name = "MobiUz-Android" rootProject.name = "MobiUz-Android"
include ':app' include ':app'
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