Commit f36c04c8 authored by shohboz's avatar shohboz

[UPD] MUS-282 Feature, updated home page data

parent 53283a78
......@@ -2,26 +2,26 @@ package com.mobiuz.app.dev.model
data class ServiceData (
val id:Int,
val title:UzRuEn,
val short_description:UzRuEn,
val title:Translate,
val short_description:Translate,
val data: List<InnerData>
)
data class UzRuEn(
data class Translate(
val uz:String,
val ru:String,
val en:String
)
data class InnerData(
val title:UzRuEn,
val title:Translate,
val data: List<UssdData>
)
data class UssdData(
val title:UzRuEn,
val short_description:UzRuEn,
val title:Translate,
val short_description:Translate,
val code: String,
val limit: Int,
)
\ No newline at end of file
)
\ No newline at end of file
......@@ -62,6 +62,12 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
mySharedPref.edit().putString(::userName.name, value).apply()
}
var userBirthday: String
get() = mySharedPref.getString(::userBirthday.name, "") ?: ""
set(value) {
mySharedPref.edit().putString(::userBirthday.name, value).apply()
}
var services: String
get() = mySharedPref.getString(::services.name, "") ?: ""
set(value) {
......
......@@ -7,7 +7,8 @@ data class Customer(
data class CustomerData(
var info: CustomerInfo?,
var name: String,
val tariff:TarifCodeName?
val tariff:TarifCodeName?,
var date_of_birth: String
)
data class TarifCodeName(
......
package com.mobiuz.app.dev.network.model
data class Status(
var message: String,
var code: Int
)
\ No newline at end of file
......@@ -136,7 +136,6 @@ class AuthRepository @Inject constructor(
suspend fun resetSmsCode(data: UserAuth): UiStateObject<String> {
return try {
val res = apiService.reSendSms(data)
when {
res.status -> {
UiStateObject.SUCCESS(res.data ?: "")
......
package com.mobiuz.app.dev.ui.auth
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.mobiuz.app.dev.model.UserAuth
......@@ -8,7 +9,9 @@ import com.mobiuz.app.dev.network.model.ChangePassword
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.network.repository.AuthRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import javax.inject.Inject
......@@ -18,94 +21,84 @@ class AuthViewModel @Inject constructor(
private val repository: AuthRepository
) : ViewModel() {
private val _checkPhoneUiState = MutableStateFlow<UiStateObject<Action>>(UiStateObject.EMPTY)
val checkPhoneUiState: StateFlow<UiStateObject<Action>> = _checkPhoneUiState
private val _checkPhoneUiState = MutableSharedFlow<UiStateObject<Action>>()
val checkPhoneUiState: SharedFlow<UiStateObject<Action>> = _checkPhoneUiState
fun checkPhone(data: UserAuth) = viewModelScope.launch {
_checkPhoneUiState.value = UiStateObject.LOADING
_checkPhoneUiState.value = repository.checkPhone(data)
_checkPhoneUiState.value = UiStateObject.EMPTY
_checkPhoneUiState.emit(UiStateObject.LOADING)
_checkPhoneUiState.emit(repository.checkPhone(data))
}
private val _registerUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val registerUiState: StateFlow<UiStateObject<String>> = _registerUiState
private val _registerUiState = MutableSharedFlow<UiStateObject<String>>()
val registerUiState: SharedFlow<UiStateObject<String>> = _registerUiState
fun register(data: UserAuth) = viewModelScope.launch {
_registerUiState.value = UiStateObject.LOADING
_registerUiState.value = repository.registerUser(data)
_registerUiState.value = UiStateObject.EMPTY
_registerUiState.emit(UiStateObject.LOADING)
_registerUiState.emit(repository.registerUser(data))
}
private val _verificationUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val verificationUiState: StateFlow<UiStateObject<String>> = _verificationUiState
private val _verificationUiState = MutableSharedFlow<UiStateObject<String>>()
val verificationUiState: SharedFlow<UiStateObject<String>> = _verificationUiState
fun verification(data: UserAuth) = viewModelScope.launch {
_verificationUiState.value = UiStateObject.LOADING
_verificationUiState.value = repository.checkSMSCode(data)
_verificationUiState.value = UiStateObject.EMPTY
_verificationUiState.emit(UiStateObject.LOADING)
_verificationUiState.emit(repository.checkSMSCode(data))
}
private val _loginUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val loginUiState: StateFlow<UiStateObject<String>> = _loginUiState
private val _loginUiState = MutableSharedFlow<UiStateObject<String>>()
val loginUiState: SharedFlow<UiStateObject<String>> = _loginUiState
fun login(data: UserAuth) = viewModelScope.launch {
_loginUiState.value = UiStateObject.LOADING
_loginUiState.value = repository.loginUser(data)
_loginUiState.value = UiStateObject.EMPTY
_loginUiState.emit(UiStateObject.LOADING)
_loginUiState.emit(repository.loginUser(data))
}
private val _forgetPasswordUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val forgetPasswordUiState: StateFlow<UiStateObject<String>> = _forgetPasswordUiState
private val _forgetPasswordUiState = MutableSharedFlow<UiStateObject<String>>()
val forgetPasswordUiState: SharedFlow<UiStateObject<String>> = _forgetPasswordUiState
fun forgetPassword(data: UserAuth) = viewModelScope.launch {
_forgetPasswordUiState.value = UiStateObject.LOADING
_forgetPasswordUiState.value = repository.forgetPassword(data)
_forgetPasswordUiState.value = UiStateObject.EMPTY
_forgetPasswordUiState.emit(UiStateObject.LOADING)
_forgetPasswordUiState.emit(repository.forgetPassword(data))
}
private val _checkResetCodeUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val checkResetCodeUiState: StateFlow<UiStateObject<String>> = _checkResetCodeUiState
private val _checkResetCodeUiState = MutableSharedFlow<UiStateObject<String>>()
val checkResetCodeUiState: SharedFlow<UiStateObject<String>> = _checkResetCodeUiState
fun checkResetCode(data: UserAuth) = viewModelScope.launch {
_checkResetCodeUiState.value = UiStateObject.LOADING
_checkResetCodeUiState.value = repository.checkResetCode(data)
_checkResetCodeUiState.value = UiStateObject.EMPTY
_checkResetCodeUiState.emit(UiStateObject.LOADING)
_checkResetCodeUiState.emit(repository.checkResetCode(data))
}
private val _resetPasswordUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val resetPasswordUiState: StateFlow<UiStateObject<String>> = _resetPasswordUiState
private val _resetPasswordUiState = MutableSharedFlow<UiStateObject<String>>()
val resetPasswordUiState: SharedFlow<UiStateObject<String>> = _resetPasswordUiState
fun resetPassword(data: UserAuth) = viewModelScope.launch {
_resetPasswordUiState.value = UiStateObject.LOADING
_resetPasswordUiState.value = repository.resetPassword(data)
_resetPasswordUiState.value = UiStateObject.EMPTY
_resetPasswordUiState.emit(UiStateObject.LOADING)
_resetPasswordUiState.emit(repository.resetPassword(data))
}
private val _resetSmsCodeUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val resetSmsCodeUiState: StateFlow<UiStateObject<String>> = _resetSmsCodeUiState
private val _resetSmsCodeUiState = MutableSharedFlow<UiStateObject<String>>()
val resetSmsCodeUiState: SharedFlow<UiStateObject<String>> = _resetSmsCodeUiState
fun resetSmsCode(data: UserAuth) = viewModelScope.launch {
_resetSmsCodeUiState.value = UiStateObject.LOADING
_resetSmsCodeUiState.value = repository.resetSmsCode(data)
_resetSmsCodeUiState.value = UiStateObject.EMPTY
_resetSmsCodeUiState.emit(UiStateObject.LOADING)
_resetSmsCodeUiState.emit(repository.resetSmsCode(data))
}
private val _checkPasswordUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val checkPasswordUiState: StateFlow<UiStateObject<String>> = _checkPasswordUiState
private val _checkPasswordUiState = MutableSharedFlow<UiStateObject<String>>()
val checkPasswordUiState: SharedFlow<UiStateObject<String>> = _checkPasswordUiState
fun checkPassword(data: UserAuth) = viewModelScope.launch {
_checkPasswordUiState.value = UiStateObject.LOADING
_checkPasswordUiState.value = repository.checkPassword(data)
_checkPasswordUiState.value = UiStateObject.EMPTY
_checkPasswordUiState.emit(UiStateObject.LOADING)
_checkPasswordUiState.emit(repository.checkPassword(data))
}
private val _changePasswordUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val changePasswordUiState: StateFlow<UiStateObject<String>> = _changePasswordUiState
private val _changePasswordUiState = MutableSharedFlow<UiStateObject<String>>()
val changePasswordUiState: SharedFlow<UiStateObject<String>> = _changePasswordUiState
fun changePassword(data: ChangePassword) = viewModelScope.launch {
_changePasswordUiState.value = UiStateObject.LOADING
_changePasswordUiState.value = repository.installPassword(data)
_changePasswordUiState.value = UiStateObject.EMPTY
_changePasswordUiState.emit(UiStateObject.LOADING)
_changePasswordUiState.emit(repository.installPassword(data))
}
......
......@@ -20,30 +20,25 @@ object CONSTANTS {
const val PHONE1 = "0890"
const val PHONE2 = "+998 97 130 09 09"
const val PHONE3 = "+998 97 203 10 10"
const val DEFAULT_PHONE = "+998 97 999-99-99"
const val RESEND_CODE_TIME = 60000L
const val BLOCKED_TIME = 600
const val PHONE = "phone"
const val RESEND_CODE_TIME = 10000L
const val BLOCKED_TIME = 6000
//auth types
const val TYPE_AUTH = "type_auth"
const val LOGIN = "login"
const val TYPE_VERIFICATION = "type_verification"
const val TYPE_FORGET = "type_forget"
const val PIN_CODE = "PIN_CODE"
const val FIRST = "first"
const val SERVICE = "service"
const val TYPE_SERVICE = "type_service"
const val OFFLINE = "offline"
const val DEFAULT_PHONE = "+998 97 999-99-99"
const val FROM_ONLINE = "FROM_ONLINE"
const val FULL_SCREEN_DIALOG = "full_screen_dialog"
const val CONNECTIVITY_CHANGE = "android.net.conn.CONNECTIVITY_CHANGE"
const val MY_CONNECTIVITY_CHANGE = "MY_CONNECTIVITY_CHANGE"
//password types
......@@ -57,6 +52,7 @@ object CONSTANTS {
//pin types
const val TYPE_PIN = "TYPE_PIN"
const val TYPE_AFTER = "TYPE_AFTER"
const val NEW_PIN = "NEW_PIN"
const val CONFIRM_NEW_PIN = "CONFIRM_NEW_PIN"
const val CURRENT_PIN = "CURRENT_PIN"
......@@ -80,7 +76,4 @@ object CONSTANTS {
const val API_CHANGE_PASSWORD = "customer/change-password"
const val API_SERVICE_INDEX = "service/index"
const val LONGITUDE = 69.2602108116081
const val LATITUDE = 41.34823322480444
}
......@@ -5,12 +5,16 @@ import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.widget.FrameLayout
import android.widget.LinearLayout
import androidx.core.view.isVisible
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.tabs.TabLayoutMediator
import com.mobiuz.app.BillingActivity
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentHomeBinding
......@@ -20,10 +24,13 @@ import com.mobiuz.app.dev.network.model.Customer
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.utils.extensions.*
import com.xw.repo.widget.BounceScrollView
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import kotlinx.coroutines.isActive
import java.text.SimpleDateFormat
import java.util.*
import javax.inject.Inject
......@@ -37,16 +44,19 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val viewModel: HomeViewModel by viewModels()
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 jobAutoSlide: Job? = null
private var customer: Customer? = null
private var overScroll = 0
private val sliderAdapter = SliderAdapter()
private var lastUpdateTime = 0L
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
viewModel.mainIndex()
lastUpdateTime = System.currentTimeMillis()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
......@@ -62,10 +72,28 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
override fun setUpUI() {
bn.apply {
slider.adapter = sliderAdapter
TabLayoutMediator(tabIndicator, slider) { _, _ -> }.attach()
jobAutoSlide = viewLifecycleOwner.lifecycleScope.launchWhenStarted {
while (isActive) {
delay(4000)
if (slider.currentItem != tabIndicator.tabCount - 1) {
slider.currentItem = slider.currentItem + 1
} else {
slider.currentItem = 0
}
}
}
slider.offscreenPageLimit = 3
slider.getChildAt(0).overScrollMode = RecyclerView.OVER_SCROLL_NEVER
btnAddSum.setOnClickListener {
pref.isShowPin = false
pref.blockedTime = System.currentTimeMillis()
startActivity(Intent(requireContext(),BillingActivity::class.java))
startActivity(Intent(requireContext(), BillingActivity::class.java))
}
txtMyNumber.text = pref.userPhone.customMasketHome().replace("-", " ")
......@@ -75,20 +103,33 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
mainViewModel.openDrawer(System.currentTimeMillis())
}
val params0 = FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
val params = FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
bounceScrollView.setOnOverScrollListener { fromStart, overScrolledDistance ->
if (overScrolledDistance > 120.52632) {
if (!isProgressing) {
vibrate(requireContext())
viewModel.mainIndex()
}
// customLog("fromStart:$fromStart, overScrolledDistance:$overScrolledDistance")
if (fromStart && overScrolledDistance > 140.52632 && (lastUpdateTime < System.currentTimeMillis() - 3000)) {
vibrate(requireContext())
viewModel.mainIndex()
lastUpdateTime = System.currentTimeMillis()
}
if (fromStart && overScroll < overScrolledDistance) {
params.width = homeImage.width + (overScrolledDistance - overScroll)
params.height = homeImage.height + (overScrolledDistance - overScroll)
homeImage.layoutParams = params
} else {
params.width = homeImage.width - (overScroll - overScrolledDistance)
params.height = homeImage.height - (overScroll - overScrolledDistance)
homeImage.layoutParams = params0
}
overScroll = overScrolledDistance
}
bounceScrollView.setOnScrollListener { _, scrollY ->
if (scrollY < 1.0) {
lottie.isVisible = false
}
if (scrollY < 100) {
toolbarInsideLayout.isVisible = false
topDiv.setBackgroundColor(Color.TRANSPARENT)
......@@ -110,7 +151,6 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
viewModel.mainIndexUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
isProgressing = false
showProgressDialog(false)
bn.lottie.isVisible = false
isFirstProgressing = false
......@@ -118,13 +158,11 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
loadData()
}
is UiStateObject.ERROR -> {
isProgressing = false
isFirstProgressing = false
showProgressDialog(false)
bn.lottie.isVisible = false
}
is UiStateObject.LOADING -> {
isProgressing = true
if (isFirstProgressing) showProgressDialog(true)
else {
bn.lottie.isVisible = true
......@@ -144,17 +182,24 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
customer?.customer?.info?.let {
bn.apply {
txtBalance.text = "${it.balance?.amount?.toMoneyFormat()} ${it.balance?.currency}"
it.counters.let {
txtCountMb.text = it?.BYTE?.value?.toMoneyFormat() ?: "0"
txtTypeMb.text = it?.BYTE?.unit ?: "mb"
txtCountMinut.text = it?.SECOND?.value?.toMoneyFormat() ?: "0"
txtTypeMinut.text = it?.SECOND?.unit ?: "min"
txtTarif.text = it?.SECOND?.name ?: "My tarif"
txtTarifTo.text = it?.SECOND?.date_to?.getDateTime() ?: ""
txtCountSms.text = it?.ITEM?.value?.toMoneyFormat() ?: "0"
txtTypeSms.text = it?.ITEM?.unit ?: "sms"
pref.userBirthday = customer?.customer?.date_of_birth ?: ""
it.counters?.let {
txtCountMb.text = it.BYTE?.value?.toMoneyFormat() ?: "0"
txtTypeMb.text = it.BYTE?.unit ?: "mb"
txtSumTariff.text = getString(R.string.sum_month,it.SECOND?.value?.toMoneyFormat() ?: "0")
txtCountMinut.text = it.SECOND?.value?.toMoneyFormat() ?: "0"
txtTypeMinut.text = it.SECOND?.unit ?: "min"
txtTarif.text = it.SECOND?.name ?: "My tarif"
val strDate = it.SECOND?.date_to
val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm")
val date: Date = dateFormat.parse(strDate)
val d = SimpleDateFormat("dd MMMM")
txtTarifTo.text = d.format(date)
txtCountSms.text = it.ITEM?.value?.toMoneyFormat() ?: "0"
txtTypeSms.text = it.ITEM?.unit ?: "sms"
}
mainViewModel.setUserName(customer?.customer?.name ?: "Unnamed User")
}
......
......@@ -25,6 +25,5 @@ class HomeViewModel @Inject constructor(
_mainIndexUiState.value = repository.mainIndex()
}
suspend fun logOut() = repository.logOut()
}
\ No newline at end of file
package com.mobiuz.app.dev.ui.home
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.mobiuz.app.databinding.ItemHomeBinding
class SliderAdapter : RecyclerView.Adapter<SliderAdapter.SliderViewHolder>() {
private var listener: ((String) -> Unit)? = null
private val sliderItems: ArrayList<String> = ArrayList()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SliderViewHolder {
return SliderViewHolder(
ItemHomeBinding.inflate(LayoutInflater.from(parent.context),parent,false)
)
}
override fun onBindViewHolder(holder: SliderViewHolder, position: Int) = holder.onBind()
override fun getItemCount(): Int = 4
inner class SliderViewHolder(val view: ItemHomeBinding) : RecyclerView.ViewHolder(view.root) {
fun onBind() {
}
}
fun setOnClickListener(block: (String) -> Unit) {
listener = block
}
fun submitList(ls: List<String>) {
sliderItems.clear()
sliderItems.addAll(ls)
notifyDataSetChanged()
}
}
\ No newline at end of file
......@@ -14,9 +14,8 @@ 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.utils.extensions.getCurrentName
import com.mobiuz.app.utils.checkPermission
import com.mobiuz.app.dev.utils.extensions.checkPermission
import dagger.hilt.android.AndroidEntryPoint
import java.lang.Exception
import javax.inject.Inject
@AndroidEntryPoint
......@@ -34,16 +33,19 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = BottomSheetUssdBinding.bind(view)
lng = pref.language
super.onViewCreated(view, savedInstanceState)
setUpUI()
}
private fun setUpUI() {
bn.apply {
lng = pref.language
data.apply {
txtTitle.text = this.title.getCurrentName(lng)
val dec = this.short_description.getCurrentName(lng)
txtDescription.isVisible = dec.isNotEmpty()
txtDescription.text = dec
txtCode.text = this.code
// btnZapros.text = this.text_button
}
btnZapros.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
......@@ -51,9 +53,9 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
checkPermission(Manifest.permission.CALL_PHONE) {
try {
pref.isShowPin = false
val ussd = data.code.replace("#","") + Uri.encode("#")
val ussd = data.code.replace("#", "") + Uri.encode("#")
startActivity(Intent(Intent.ACTION_CALL, Uri.parse("tel:$ussd")))
}catch (e:Exception){
} catch (e: Exception) {
pref.isShowPin = false
}
dismiss()
......
......@@ -35,6 +35,7 @@ class ProfileFragment : BaseFragment(R.layout.fragment_profile) {
bn.apply {
txtUserPhone.text = pref.userPhone.customMasket()
txtUserName.text = pref.userName
txtBirthday.text = pref.userBirthday
txtAvatar.text = pref.userName[0].toString()
toolbar.setNavigationOnClickListener {
navController.navigateUp()
......
......@@ -22,7 +22,7 @@ import com.google.android.material.textfield.TextInputEditText
import com.google.gson.JsonSyntaxException
import com.mobiuz.app.R
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.model.UzRuEn
import com.mobiuz.app.dev.model.Translate
import com.mobiuz.app.dev.network.model.Errors
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.ExitDialog
......@@ -31,7 +31,6 @@ import com.mobiuz.app.dev.ui.global.SenderDialog
import retrofit2.HttpException
import java.io.IOException
import java.net.ConnectException
import java.sql.Date
import java.sql.Timestamp
import java.text.SimpleDateFormat
......@@ -271,7 +270,7 @@ fun List<Errors>.getMessage():String{
return message
}
fun UzRuEn.getCurrentName(lang:String):String{
fun Translate.getCurrentName(lang:String):String{
return when(lang){
CONSTANTS.EN -> this.en
CONSTANTS.RU -> this.ru
......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape android:innerRadius="0dp" android:shape="ring" android:thickness="5dp" android:useLevel="false">
<solid android:color="@color/primary110" />
</shape>
</item>
<item>
<shape android:innerRadius="0dp" android:shape="ring" android:thickness="5dp" android:useLevel="false">
<solid android:color="@color/grey20" />
</shape>
</item>
</selector>
\ No newline at end of file
......@@ -200,7 +200,8 @@
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="end"
android:text="0 Сум/мес"
android:id="@+id/txt_sum_tariff"
android:text="@string/sum_month"
android:textColor="@color/grey70"
android:textSize="14sp" />
</LinearLayout>
......@@ -358,40 +359,27 @@
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<include
layout="@layout/item_home"
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/slider"
android:layout_width="match_parent"
android:layout_height="@dimen/_150sdp"
android:layout_marginHorizontal="12dp"
android:layout_marginTop="@dimen/_16sdp" />
android:layout_marginTop="@dimen/_16sdp"
android:layout_height="@dimen/_150sdp" />
<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" />
<include
layout="@layout/item_home"
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabIndicator"
android:backgroundTint="@android:color/transparent"
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_height="24dp"
app:tabPaddingStart="8dp"
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" />
app:tabPaddingEnd="8dp"
app:tabIndicatorHeight="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:tabBackground="@drawable/tab_indicator"
app:tabGravity="center" />
</LinearLayout>
</com.xw.repo.widget.BounceScrollView>
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:paddingVertical="@dimen/_16sdp"
android:paddingHorizontal="12dp"
android:background="@drawable/banner"
android:layout_height="@dimen/_140sdp">
<ImageView
android:layout_width="wrap_content"
android:textColor="@color/primary100"
android:src="@drawable/ic_mobiuz_logo_red"
android:textStyle="bold"
android:textSize="24sp"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:textColor="@color/black80"
android:maxWidth="@dimen/_120sdp"
android:layout_marginTop="13dp"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Dui, risus"
android:textSize="10sp"
android:layout_marginBottom="8dp"
android:layout_height="wrap_content"/>
<com.google.android.material.card.MaterialCardView
android:layout_width="wrap_content"
app:cardCornerRadius="4dp"
android:layout_marginTop="20dp"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:paddingVertical="@dimen/_16sdp"
android:layout_height="@dimen/_140sdp"
android:paddingHorizontal="12dp"
android:background="@drawable/banner"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:src="@drawable/ic_mobiuz_logo_red"
android:textColor="@color/primary100"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:textColor="@color/primary100"
android:text="Узнать больше"
android:textStyle="bold"
android:textSize="12sp"
android:layout_gravity="center"
android:layout_height="wrap_content"/>
<ImageView
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:layout_marginBottom="8dp"
android:maxWidth="@dimen/_120sdp"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Dui, risus"
android:textColor="@color/black80"
android:textSize="10sp" />
<com.google.android.material.card.MaterialCardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:cardCornerRadius="4dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_marginStart="4dp"
android:src="@drawable/ic_baseline_keyboard_arrow_right"
android:layout_height="wrap_content"/>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Узнать больше"
android:textColor="@color/primary100"
android:textSize="12sp"
android:textStyle="bold" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:src="@drawable/ic_baseline_keyboard_arrow_right" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
......@@ -35,6 +35,7 @@
<fragment
android:id="@+id/myVerificationFragment"
android:name="com.mobiuz.app.dev.ui.auth.verification.MyVerificationFragment"
android:name="com.mobiuz.app.dev.ui.auth.verification.VerificationFragment"
android:label="MyVerificationFragment" />
</navigation>
\ No newline at end of file
......@@ -2,7 +2,7 @@
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/homeFragment"
app:startDestination="@id/fullScreenFragment"
android:id="@+id/nav_graph_home">
<fragment
......@@ -48,4 +48,10 @@
android:label="fragment_billing"
tools:layout="@layout/fragment_billing" />
<fragment
android:id="@+id/fullScreenFragment"
tools:layout="@layout/fragment_pin_dialog"
android:name="com.mobiuz.app.dev.ui.global.FullScreenFragment"
android:label="FullScreenFragment" />
</navigation>
\ No newline at end of file
......@@ -79,6 +79,52 @@
<string name="open">Available</string>
<string name="yes_internet_connect">Internet connection restored</string>
<string name="not_internet_connect">No active connection</string>
<string name="btn_try_again">Try again</string>
<string name="btn_try_again">Попробуй снова</string>
<string name="not_internet_try_again">Check your internet connection and try again</string>
<string name="cannot_change_pin">You cannot change new pin to current pin</string>
<string name="cannot_change_password">You cannot change new password to current password</string>
<string name="password_updated">Password Successfully Updated</string>
<string name="by_signing_up_you_re_agree_to_our_nterms_of_use_and_privacy_policy">By signing up, you\'re agree to our \nTerms of Use and Privacy Policy</string>
<string name="not_internet">Нет интернет соединения</string>
<string name="settings_safety">Настройки безопасности действуют только для основного номера +998 97 999-99-99</string>
<string name="popitok_error_password">"Замена пароля невозможна "</string>
<string name="close_process">Закрыть</string>
<string name="login_register">Авторизация/Регистрация</string>
<string name="impossible_change_password">Замена пароля невозможна</string>
<string name="wrong_password">Неверный Пароль</string>
<string name="your_opinion_matters">Ваше мнение имеет значение</string>
<string name="send_an_appeal">Отправить обращение</string>
<string name="email">Email</string>
<string name="telegram_bot">Телеграм бот</string>
<string name="contact_us">Связь с нами</string>
<string name="all_nomer">Со всех номеров</string>
<string name="for_abonent">Для абонентов</string>
<string name="pin_code_updated">Вы ввели неправильный PIN код 3 раза</string>
<string name="popitok_error">"Смена ПИН кода невозможна "</string>
<string name="popitok">Неверный PIN-код \nОсталось %1$s попытки</string>
<string name="popitok_password">Неверный Пароль \nОсталось %1$s попытки</string>
<string name="confirm_new_pin">Подтвердите PIN-код</string>
<string name="enter_new_pin">Введите новый PIN-код</string>
<string name="forget_pin">Забыли PIN?</string>
<string name="enter_old_pin">Введите старый PIN-код</string>
<string name="password_changed">Пароль изменен</string>
<string name="enter_confirm_new_password">Для подтверждения введите новый пароль ещё раз</string>
<string name="enter_new_password">Введите новый пароль</string>
<string name="enter_password">Введите пароль:</string>
<string name="enter_current_password">Введите текущий пароль</string>
<string name="minutes_and_sms">Минуты и SMS</string>
<string name="packets">Интернет-пакеты</string>
<string name="tariffs">Тарифы</string>
<string name="main_ussd_command">Основные ussd команды</string>
<string name="services">Услуги</string>
<string name="profile">Профиль</string>
<string name="safety">Безопасность</string>
<string name="error_code">Неверный код</string>
<string name="redact_data"><u>Согласие на обработку данных</u></string>
<string name="public_oferta"><u>Оферта на обработку персональных данных</u></string>
<string name="txt_confidensialnost"><u>Политика конфиденциальности</u></string>
<string name="oferta_finans"><u>Оферта на предоставление финансовых услуг</u></string>
<string name="open_with_password">Войти по паролю</string>
<string name="sum_month">%1$s Сум/мес</string>
</resources>
\ No newline at end of file
......@@ -81,4 +81,50 @@
<string name="not_internet_connect">Отсутствует активное подключение</string>
<string name="btn_try_again">Попробуй снова</string>
<string name="not_internet_try_again">Проверьте интернет соединение и попробуйте снова</string>
<string name="cannot_change_pin">Вы не можете изменить новый пин-код на текущий пин-код</string>
<string name="cannot_change_password">Вы не можете изменить новый пароль на текущий пароль</string>
<string name="password_updated">Пароль успешно обновлен</string>
<string name="by_signing_up_you_re_agree_to_our_nterms_of_use_and_privacy_policy">By signing up, you\'re agree to our \nTerms of Use and Privacy Policy</string>
<string name="not_internet">Нет интернет соединения</string>
<string name="settings_safety">Настройки безопасности действуют только для основного номера +998 97 999-99-99</string>
<string name="popitok_error_password">"Замена пароля невозможна "</string>
<string name="close_process">Закрыть</string>
<string name="login_register">Авторизация/Регистрация</string>
<string name="impossible_change_password">Замена пароля невозможна</string>
<string name="wrong_password">Неверный Пароль</string>
<string name="your_opinion_matters">Ваше мнение имеет значение</string>
<string name="send_an_appeal">Отправить обращение</string>
<string name="email">Email</string>
<string name="telegram_bot">Телеграм бот</string>
<string name="contact_us">Связь с нами</string>
<string name="all_nomer">Со всех номеров</string>
<string name="for_abonent">Для абонентов</string>
<string name="pin_code_updated">Вы ввели неправильный PIN код 3 раза</string>
<string name="popitok_error">"Смена ПИН кода невозможна "</string>
<string name="popitok">Неверный PIN-код \nОсталось %1$s попытки</string>
<string name="popitok_password">Неверный Пароль \nОсталось %1$s попытки</string>
<string name="confirm_new_pin">Подтвердите PIN-код</string>
<string name="enter_new_pin">Введите новый PIN-код</string>
<string name="forget_pin">Забыли PIN?</string>
<string name="enter_old_pin">Введите старый PIN-код</string>
<string name="password_changed">Пароль изменен</string>
<string name="enter_confirm_new_password">Для подтверждения введите новый пароль ещё раз</string>
<string name="enter_new_password">Введите новый пароль</string>
<string name="enter_password">Введите пароль:</string>
<string name="enter_current_password">Введите текущий пароль</string>
<string name="minutes_and_sms">Минуты и SMS</string>
<string name="packets">Интернет-пакеты</string>
<string name="tariffs">Тарифы</string>
<string name="main_ussd_command">Основные ussd команды</string>
<string name="services">Услуги</string>
<string name="profile">Профиль</string>
<string name="safety">Безопасность</string>
<string name="error_code">Неверный код</string>
<string name="redact_data"><u>Согласие на обработку данных</u></string>
<string name="public_oferta"><u>Оферта на обработку персональных данных</u></string>
<string name="txt_confidensialnost"><u>Политика конфиденциальности</u></string>
<string name="oferta_finans"><u>Оферта на предоставление финансовых услуг</u></string>
<string name="open_with_password">Войти по паролю</string>
<string name="sum_month">%1$s Сум/мес</string>
</resources>
\ No newline at end of file
......@@ -79,6 +79,52 @@
<string name="open">Mavjud</string>
<string name="yes_internet_connect">Internetga ulanish tiklandi</string>
<string name="not_internet_connect">Faol ulanish yo\'q</string>
<string name="btn_try_again">Qayta urinib ko\'rish</string>
<string name="btn_try_again">Попробуй снова</string>
<string name="not_internet_try_again">Internet aloqangizni tekshiring va qayta urinib ko\'ring</string>
<string name="cannot_change_pin">Siz yangi pin kodni joriy pin kodiga o\'zgartira olmaysiz</string>
<string name="cannot_change_password">Siz yangi parolni joriy parolga o\'zgartira olmaysiz</string>
<string name="password_updated">Parol muvaffaqiyatli yangilandi</string>
<string name="by_signing_up_you_re_agree_to_our_nterms_of_use_and_privacy_policy">By signing up, you\'re agree to our \nTerms of Use and Privacy Policy</string>
<string name="not_internet">Нет интернет соединения</string>
<string name="settings_safety">Настройки безопасности действуют только для основного номера +998 97 999-99-99</string>
<string name="popitok_error_password">"Замена пароля невозможна "</string>
<string name="close_process">Закрыть</string>
<string name="login_register">Авторизация/Регистрация</string>
<string name="impossible_change_password">Замена пароля невозможна</string>
<string name="wrong_password">Неверный Пароль</string>
<string name="your_opinion_matters">Ваше мнение имеет значение</string>
<string name="send_an_appeal">Отправить обращение</string>
<string name="email">Email</string>
<string name="telegram_bot">Телеграм бот</string>
<string name="contact_us">Связь с нами</string>
<string name="all_nomer">Со всех номеров</string>
<string name="for_abonent">Для абонентов</string>
<string name="pin_code_updated">Вы ввели неправильный PIN код 3 раза</string>
<string name="popitok_error">"Смена ПИН кода невозможна "</string>
<string name="popitok">Неверный PIN-код \nОсталось %1$s попытки</string>
<string name="popitok_password">Неверный Пароль \nОсталось %1$s попытки</string>
<string name="confirm_new_pin">Подтвердите PIN-код</string>
<string name="enter_new_pin">Введите новый PIN-код</string>
<string name="forget_pin">Забыли PIN?</string>
<string name="enter_old_pin">Введите старый PIN-код</string>
<string name="password_changed">Пароль изменен</string>
<string name="enter_confirm_new_password">Для подтверждения введите новый пароль ещё раз</string>
<string name="enter_new_password">Введите новый пароль</string>
<string name="enter_password">Введите пароль:</string>
<string name="enter_current_password">Введите текущий пароль</string>
<string name="minutes_and_sms">Минуты и SMS</string>
<string name="packets">Интернет-пакеты</string>
<string name="tariffs">Тарифы</string>
<string name="main_ussd_command">Основные ussd команды</string>
<string name="services">Услуги</string>
<string name="profile">Профиль</string>
<string name="safety">Безопасность</string>
<string name="error_code">Неверный код</string>
<string name="redact_data"><u>Согласие на обработку данных</u></string>
<string name="public_oferta"><u>Оферта на обработку персональных данных</u></string>
<string name="txt_confidensialnost"><u>Политика конфиденциальности</u></string>
<string name="oferta_finans"><u>Оферта на предоставление финансовых услуг</u></string>
<string name="open_with_password">Войти по паролю</string>
<string name="sum_month">%1$s Сум/мес</string>
</resources>
\ No newline at end of file
......@@ -127,10 +127,10 @@
<string name="close_process">Закрыть</string>
<string name="popitok_error_password">Замена пароля невозможна \nВы ввели неправильный пароль 3 раза</string>
<string name="settings_safety">Настройки безопасности действуют только для основного номера +998 97 999-99-99</string>
<string name="title_activity_offline">OfflineActivity</string>
<string name="title_home">Home</string>
<string name="title_dashboard">Dashboard</string>
<string name="title_notifications">Notifications</string>
<string name="title_activity_offline" translatable="false">OfflineActivity</string>
<string name="title_home" translatable="false">Home</string>
<string name="title_dashboard" translatable="false">Dashboard</string>
<string name="title_notifications" translatable="false">Notifications</string>
<string name="not_internet">Нет интернет соединения</string>
<string name="not_internet_try_again">Проверьте интернет соединение и попробуйте снова</string>
<string name="open">Доступно</string>
......@@ -139,8 +139,12 @@
<string name="to_offline">Перейти в офлайн режим</string>
<string name="not_internet_connect">Отсутствует активное подключение</string>
<string name="yes_internet_connect">Интернет соединение восстановлено</string>
<string name="oferta_finans"><u>Оферта на предоставление \nфинансовых услуг</u></string>
<string name="oferta_finans"><u>Оферта на предоставление финансовых услуг</u></string>
<string name="by_signing_up_you_re_agree_to_our_nterms_of_use_and_privacy_policy">By signing up, you\'re agree to our \nTerms of Use and Privacy Policy</string>
<string name="btn_try_again">Попробуй снова</string>
<string name="cannot_change_pin">You cannot change new pin to current pin</string>
<string name="cannot_change_password">You cannot change new password to current password</string>
<string name="open_with_password">Войти по паролю</string>
<string name="sum_month">%1$s Сум/мес</string>
</resources>
\ No newline at end of file
......@@ -79,8 +79,8 @@
</style>
<style name="BtnStyle">
<item name="android:layout_height">@dimen/_54sdp</item>
<item name="android:layout_width">@dimen/_54sdp</item>
<item name="android:layout_height">@dimen/_50sdp</item>
<item name="android:layout_width">@dimen/_50sdp</item>
<item name="background">@drawable/bgn_pin_btn</item>
<item name="android:clickable">true</item>
<item name="android:focusable">true</item>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment