Commit caf6065a authored by shohboz's avatar shohboz

[FIX] MUS-401, Feature, fixed bugs with sms and card

parent 7db31b15
......@@ -280,6 +280,8 @@ dependencies {
implementation 'xyz.peridy.shimmer:shimmerlayout:1.1'
implementation 'com.facebook.shimmer:shimmer:0.5.0'
implementation 'com.github.reinaldoarrosi:maskededittext:1.1.0'
}
repositories {
maven {
......
......@@ -47,7 +47,6 @@ class MainRepository @Inject constructor(
try {
withContext(Dispatchers.IO) {
AGRBilling.deleteAllCards()
// todo monitoring ni delete qilish kerak
apiService.logOut()
dao.deleteAllMonitoring()
}
......
......@@ -44,6 +44,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
setUpUI()
collects()
}
override fun setUpUI() {
......@@ -62,7 +63,6 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
})
inputPhone.addTextChangedListener(object : TextWatcherWrapper() {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
super.beforeTextChanged(s, start, count, after)
oldText = s.toString()
......@@ -72,13 +72,21 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
super.onTextChanged(s, start, before, count)
try {
inputPhone.removeTextChangedListener(this)
newText = s.toString().filter { it.isDigit() }.maskedTextMobi()
val text = s.toString()
if(text.length < 5){
inputPhone.setText("+998 ")
inputPhone.setSelection(5)
}else{
newText = text.filter { it.isDigit() || it == '+'}.maskedTextMobi()
inputPhone.setText(newText)
inputPhone.setSelection(oldText.checkChangedPosition(newText))
}
inputPhone.addTextChangedListener(this)
btnCheckPhone.isEnabled = inputPhone.text.toString().trim().length == 12
btnCheckPhone.isEnabled = inputPhone.text.toString().filter { it.isDigit() || it == '+' }.length == 13
}catch (e: Exception){
inputPhone.text.clear()
inputPhone.addTextChangedListener(this)
}
}
......@@ -86,8 +94,8 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
btnCheckPhone.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
phone = "+998" + inputPhone.text.toString().trim().replace(" ","")
phoneRaw = "+998 " + inputPhone.text.toString().trim()
phone = inputPhone.text.toString().filter { it.isDigit() || it == '+' }
phoneRaw = inputPhone.text.toString().trim()
when {
phone.length < 13 -> {
inputPhone.startAnimation(AnimationUtils.loadAnimation(requireContext(), R.anim.shake))
......
......@@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.biometric.BiometricManager
import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_STRONG
import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_WEAK
......@@ -65,19 +66,13 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
bn.apply {
loadData()
toolbar.setNavigationOnClickListener {
if (type == CONSTANTS.NEW_PIN){
when {
navController.popBackStack(R.id.registerFragment,false) -> {
}
navController.popBackStack(R.id.loginFragment,false) -> {
}
else -> navController.navigateUp()
handleBackStack()
}
}else navController.navigateUp()
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
handleBackStack()
}
})
rvPin.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
rvPin.setHasFixedSize(true)
......@@ -174,6 +169,16 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
}
}
private fun handleBackStack() {
if (type == CONSTANTS.NEW_PIN){
when {
navController.popBackStack(R.id.registerFragment,false) -> {}
navController.popBackStack(R.id.loginFragment,false) -> {}
else -> navController.navigateUp()
}
}else navController.navigateUp()
}
private fun checkBiometric() : Boolean {
return when (biometricManager.canAuthenticate(BIOMETRIC_STRONG or BIOMETRIC_WEAK)) {
BiometricManager.BIOMETRIC_SUCCESS -> true
......
......@@ -3,12 +3,9 @@ package uz.mobiuz.mobiservice.dev.ui.auth.verification
import android.app.Activity
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.ViewGroup
import android.view.animation.AnimationUtils
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
......@@ -36,7 +33,6 @@ import uz.mobiuz.mobiservice.dev.utils.Utils
import uz.mobiuz.mobiservice.dev.utils.extensions.*
import uz.mobiuz.mobiservice.dev.utils.hideKeyboard
import uz.mobiuz.mobiservice.dev.utils.showKeyboard
import uz.mobiuz.mobiservice.dev.utils.sms.MessageDialog
import uz.mobiuz.mobiservice.dev.utils.sms.SmsBroadcastReceiver
import java.util.regex.Pattern
import javax.inject.Inject
......@@ -62,7 +58,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
private var cardNumber = ""
private var cardId = ""
private var cardExpire = ""
private var payCardnumber = ""
private var payCardNumber = ""
private var monitoring = ""
var transactionId = 0L
......@@ -80,7 +76,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
cardId = it.getString(CONSTANTS.CARD_ID) ?: ""
cardNumber = it.getString(CONSTANTS.CARD_NUMBER) ?: ""
cardExpire = it.getString(CONSTANTS.CARD_EXPIRE) ?: ""
payCardnumber = it.getString(CONSTANTS.PAY_CARD_NUMBER) ?: ""
payCardNumber = it.getString(CONSTANTS.PAY_CARD_NUMBER) ?: ""
transactionId = it.getLong(CONSTANTS.TRANSACTION_ID)
saveCard = it.getInt(CONSTANTS.SAVED_CARD, 0)
......@@ -146,31 +142,31 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
sentCodeAgain.setOnClickListener {
when (type) {
CONSTANTS.TYPE_ADD_CARD -> {
viewModel.resendSms("998949125150", cardNumber, cardExpire)
viewModel.resendSms(pref.userPhone.filter { it.isDigit() }, cardNumber, cardExpire)
}
CONSTANTS.TYPE_ANOTHER_CARD -> {
viewModel.vendorResendSms(transactionId)
}
else -> viewModel.resetSmsCode(UserAuth(phone.filter { it.isDigit() }))
else -> viewModel.resetSmsCode(UserAuth(pref.userPhone.filter { it.isDigit() }))
}
}
coutdownView.setOnCountdownEndListener {
count(false)
}
// setVerificationCode()
}
}
private fun setVerificationCode(code: String) {
if (code.length == 6) {
bn.apply {
pin1.setText(verificationCode[0].toString())
pin2.setText(verificationCode[1].toString())
pin3.setText(verificationCode[2].toString())
pin4.setText(verificationCode[3].toString())
pin5.setText(verificationCode[4].toString())
pin6.setText(verificationCode[5].toString())
pin1.setText(code[0].toString())
pin2.setText(code[1].toString())
pin3.setText(code[2].toString())
pin4.setText(code[3].toString())
pin5.setText(code[4].toString())
pin6.setText(code[5].toString())
pin6.requestFocus()
pin6.setSelection(1)
btnVerification.isEnabled = true
}
}
......@@ -384,7 +380,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
R.id.paymentSuccessfulFragment,
bundleOf(
CONSTANTS.PAY_SAVE_CARD to saveCard,
CONSTANTS.PAY_CARD_NUMBER to payCardnumber,
CONSTANTS.PAY_CARD_NUMBER to payCardNumber,
CONSTANTS.PAY_MONITORING to monitoring
)
)
......@@ -448,7 +444,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
private fun getOtpFromMessage(message: String) { // This will match any 6 digit number in the message
val matcher = Pattern.compile("(|^)\\d{6}").matcher(message)
if (matcher.find()) {
customLog("verification code:${matcher.group(0)} ")
// customLog("verification code:${matcher.group(0)} ")
setVerificationCode(matcher.group(0))
}
}
......@@ -479,17 +475,22 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
smsBroadcastReceiver?.smsBroadcastReceiverListener =
object : SmsBroadcastReceiver.SmsBroadcastReceiverListener {
override fun onSuccess(intent: Intent?) {
pref.isShowPin = false
startActivityForResult(intent, 200)
}
override fun onFailure() {}
}
val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
context?.registerReceiver(smsBroadcastReceiver, intentFilter)
requireActivity().registerReceiver(smsBroadcastReceiver, intentFilter)
}
override fun onDestroyView() {
requireActivity().unregisterReceiver(smsBroadcastReceiver)
super.onDestroyView()
}
override fun onDestroy() {
context?.unregisterReceiver(smsBroadcastReceiver)
_bn = null
super.onDestroy()
}
......
package uz.mobiuz.mobiservice.dev.ui.global
import android.annotation.SuppressLint
import uz.mobiuz.mobiservice.dev.BuildConfig
import java.text.SimpleDateFormat
object CONSTANTS {
......@@ -13,8 +14,9 @@ object CONSTANTS {
const val CARD_NUMBER = "CARD_NUMBER"
const val CARD_EXPIRE = "CARD_EXPIRE"
const val UNAUTHORIZED = "UNAUTHORIZED"
const val BASE_URL = "http://10.160.41.12:82/"
// const val BASE_URL = "https://mobileapp.mobi.uz/"
val BASE_URL by lazy { if (BuildConfig.DEBUG) BASE_URL_PROD else BASE_URL_PROD }
private const val BASE_URL_TEST = "https://testapp.mobi.uz:8443/"
private const val BASE_URL_PROD = "https://mobileapp.mobi.uz/"
//languages
const val RU = "ru"
......@@ -30,17 +32,17 @@ object CONSTANTS {
const val TERMS_OF_USE = "Terms of Use"
const val PRIVACY_POLICY = "Privacy Policy"
const val LICENSE_UZ = "${BASE_URL}uploads/licenses/license_uz.html"
const val LICENSE_RU = "${BASE_URL}uploads/licenses/license_ru.html"
const val LICENSE_EN = "${BASE_URL}uploads/licenses/license_en.html"
val LICENSE_UZ = "${BASE_URL}uploads/licenses/license_uz.html"
val LICENSE_RU = "${BASE_URL}uploads/licenses/license_ru.html"
val LICENSE_EN = "${BASE_URL}uploads/licenses/license_en.html"
const val PRIVACY_POLICY_UZ = "${BASE_URL}uploads/privacy/privacy_policy_uz.html"
const val PRIVACY_POLICY_RU = "${BASE_URL}uploads/privacy/privacy_policy_ru.html"
const val PRIVACY_POLICY_EN = "${BASE_URL}uploads/privacy/privacy_policy_en.html"
val PRIVACY_POLICY_UZ = "${BASE_URL}uploads/privacy/privacy_policy_uz.html"
val PRIVACY_POLICY_RU = "${BASE_URL}uploads/privacy/privacy_policy_ru.html"
val PRIVACY_POLICY_EN = "${BASE_URL}uploads/privacy/privacy_policy_en.html"
const val PAYSYS_LICENSE_UZ = "${BASE_URL}uploads/paysys/license_uz.html"
const val PAYSYS_LICENSE_RU = "${BASE_URL}uploads/paysys/license_ru.html"
const val PAYSYS_LICENSE_EN = "${BASE_URL}uploads/paysys/license_en.html"
val PAYSYS_LICENSE_UZ = "${BASE_URL}uploads/paysys/license_uz.html"
val PAYSYS_LICENSE_RU = "${BASE_URL}uploads/paysys/license_ru.html"
val PAYSYS_LICENSE_EN = "${BASE_URL}uploads/paysys/license_en.html"
const val PHONE1 = "0890"
const val PHONE2 = "+998 97 130 09 09"
......
......@@ -219,7 +219,6 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
private fun loadData() {
try {
sliderAdapter.submitList(customer?.events ?: emptyList())
bn.imagePlaceHolder.isVisible = customer?.events?.isEmpty() ?: false
customer?.customer?.info?.let {
bn.apply {
......
......@@ -4,7 +4,9 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
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 uz.agr.sdk.core.entity.card.CardInfo
import uz.agr.sdk.core.entity.card.CardRegistration
......@@ -115,5 +117,12 @@ class CardViewModel @Inject constructor(
})
}
private val _onClickedCardUiState = MutableStateFlow<UiStateObject<Long>>(UiStateObject.EMPTY)
val onClickedCardUiState: StateFlow<UiStateObject<Long>> = _onClickedCardUiState
fun onCLickAddCard(time:Long){
_onClickedCardUiState.value = UiStateObject.SUCCESS(time)
}
}
\ No newline at end of file
......@@ -96,27 +96,6 @@ class CardsListFragment : BaseFragment(R.layout.fragment_cards_list) {
)
)
// swipeToRefresh.setColorSchemeResources(
// R.color.agr_black,
// R.color.primary100
// )
// swipeToRefresh.setOnRefreshListener {
// MobiUz.refreshCardsInfo(object : BaseListener<List<CardInfo>> {
// override fun error(message: String) {
// swipeToRefresh.isRefreshing = false
// showToastMessage(message)
// }
//
// override fun loading(boolean: Boolean) {
// swipeToRefresh.isRefreshing = boolean
// }
//
// override fun success(data: List<CardInfo>) {
// swipeToRefresh.isRefreshing = false
// setData(data)
// }
// })
// }
}
......
......@@ -36,7 +36,7 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private var saveCard: Int = 0
private var cardNumber = ""
private var cardNumber: String = ""
private lateinit var monitoring: Monitoring
private val viewModel: HistoryViewModel by viewModels()
......@@ -47,7 +47,7 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
super.onCreate(savedInstanceState)
arguments?.let {
saveCard = it.getInt(CONSTANTS.PAY_SAVE_CARD, 0)
saveCard = it.getInt(CONSTANTS.PAY_SAVE_CARD, 0) ?: 0
cardNumber = it.getString(CONSTANTS.PAY_CARD_NUMBER, "") ?: ""
val arg = it.getString(CONSTANTS.PAY_MONITORING, "") ?: ""
if (arg.isNotEmpty())
......@@ -119,14 +119,9 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
}
if (card != null) {
AGRBilling.deleteCard(card, object : BaseListener<Boolean> {
override fun error(message: String) {
message
}
override fun error(message: String) {}
override fun loading(boolean: Boolean) {}
override fun success(data: Boolean) {
data
}
override fun success(data: Boolean) {}
})
}
}
......
......@@ -146,7 +146,7 @@ fun View.getStatusBarHeight(): Int {
fun String.maskedTextMobi(): String {
var newText = ""
for (i in this.indices) {
if (i == 2 || i == 5 || i == 7) {
if (i == 4 || i == 6 || i == 9 || i == 11) {
newText += " "
}
newText += this[i]
......
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/primary100"
android:state_checked="true" />
<item android:color="@color/grey70"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/primary70"
android:state_checked="true" />
<item android:color="@color/grey30"/>
</selector>
\ No newline at end of file
......@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/gradient"
android:orientation="vertical"
tools:context=".dev.ui.auth.biometric.BiometricFragment">
......@@ -78,11 +79,13 @@
android:textColor="@color/black100"
android:textSize="17sp" />
<Switch
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/btn_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
app:trackTint="@color/switch_track_selector"
app:thumbTint="@color/switch_thumb_selector"
tools:ignore="UseSwitchCompatOrMaterialXml" />
</LinearLayout>
......
......@@ -38,35 +38,16 @@
android:textColor="@color/black75"
/>
<LinearLayout
android:layout_width="match_parent"
android:background="@drawable/edit_text_unchecked"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="6dp"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:text="+998 "
android:visibility="visible"
android:layout_marginStart="@dimen/_16sdp"
android:paddingVertical="@dimen/_14sdp"
android:textStyle="bold"
android:layout_gravity="center"
android:textColor="@color/black80"
android:textSize="17sp"
android:layout_height="wrap_content"/>
<EditText
android:layout_width="match_parent"
android:id="@+id/input_phone"
android:inputType="phone"
app:allowed_chars="1234567890"
android:longClickable="false"
app:mask="+998 ## ### ## ##"
android:maxLength="12"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="6dp"
android:paddingHorizontal="@dimen/_16sdp"
android:text="+998 "
android:maxLength="17"
android:paddingVertical="@dimen/_14sdp"
android:textStyle="bold"
android:layout_gravity="center"
......@@ -74,7 +55,6 @@
android:textSize="17sp"
android:background="@drawable/edit_text_unchecked"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
......
......@@ -426,16 +426,6 @@
app:riv_corner_radius="6dp" />
</com.facebook.shimmer.ShimmerFrameLayout>
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/image_place_holder"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="@dimen/_16sdp"
android:src="@drawable/image_slider2"
android:visibility="gone" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
......
......@@ -40,22 +40,24 @@
android:textColor="@color/black75"
android:textSize="15sp" />
<com.github.pinball83.maskededittext.MaskedEditText
android:id="@+id/etPhone"
<EditText
android:id="@+id/input_phone"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="4dp"
android:layout_marginTop="6dp"
android:background="@drawable/edit_text_unchecked"
android:gravity="center|start"
android:imeOptions="actionNext"
android:inputType="number|textNoSuggestions"
android:paddingHorizontal="12dp"
android:paddingVertical="12dp"
android:textColor="@color/black100"
android:textSize="15sp"
app:mask="+998 ** *** ** **"
app:notMaskedSymbol="*" />
android:imeOptions="actionDone"
android:inputType="phone"
android:longClickable="false"
android:maxLength="17"
android:paddingHorizontal="@dimen/_16sdp"
android:paddingVertical="@dimen/_14sdp"
android:text="+998 "
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_hint_amount"
......@@ -159,18 +161,22 @@
tools:visibility="visible" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/addCardForm"
tools:visibility="visible"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="16dp"
android:background="@drawable/card_background"
android:layout_marginBottom="16dp"
android:orientation="vertical"
android:padding="16dp"
android:visibility="gone"
tools:visibility="visible">
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
......@@ -185,7 +191,6 @@
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:background="@android:color/transparent"
android:textColorHint="@color/grey100"
android:hint="0000 0000 0000 0000"
android:imeOptions="actionNext"
android:inputType="number|textNoSuggestions"
......@@ -193,12 +198,14 @@
android:maxLength="19"
android:paddingVertical="12dp"
android:textColor="@color/white100"
android:textColorHint="@color/grey100"
android:textSize="15sp"
tools:ignore="Autofill,HardcodedText" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/white100"/>
android:background="@color/white100" />
<TextView
android:id="@+id/tvErrorMsg"
......@@ -226,22 +233,23 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:hint="ММ / ГГ"
android:background="@android:color/transparent"
android:textColorHint="@color/grey100"
android:hint="ММ / ГГ"
android:imeOptions="actionDone"
android:textColor="@color/white100"
android:importantForAutofill="no"
android:inputType="number|textNoSuggestions"
android:longClickable="false"
android:maxLength="5"
android:paddingVertical="12dp"
android:textColor="@color/white100"
android:textColorHint="@color/grey100"
android:textSize="15sp"
tools:ignore="HardcodedText" />
<View
android:layout_width="60dp"
android:layout_height="1dp"
android:background="@color/white100"/>
android:background="@color/white100" />
<TextView
android:id="@+id/tvErrorMsgExpiry"
......@@ -256,14 +264,14 @@
android:visibility="gone"
tools:visibility="visible" />
</LinearLayout>
<LinearLayout
android:id="@+id/checkboxSaveCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="15dp"
android:layout_marginTop="16dp"
android:gravity="center">
<TextView
......@@ -274,13 +282,18 @@
android:textColor="@color/black100"
android:textSize="16sp" />
<Switch
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/btnSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
app:thumbTint="@color/switch_thumb_selector"
app:trackTint="@color/switch_track_selector"
tools:ignore="UseSwitchCompatOrMaterialXml" />
</LinearLayout>
</LinearLayout>
<Space
android:layout_width="match_parent"
android:layout_height="wrap_content"
......
......@@ -24,6 +24,8 @@
<item name="android:textColor">@color/black</item>
<item name="buttonStyle">@style/ButtonPrimary</item>
<item name="bottomSheetDialogTheme">@style/AppModalBottomSheetStyle</item>
<item name="colorSwitchThumbNormal">@color/primary100</item>
<!-- Customize your theme here. -->
</style>
......
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