Commit ae54b133 authored by shohboz's avatar shohboz

[UPD] MUS-266 Feature, updated clickable urls and other changes

parent 0cad9a91
......@@ -54,6 +54,7 @@
<entry key="app/src/main/res/layout/activity_settings.xml" value="0.25625" />
<entry key="app/src/main/res/layout/activity_splash.xml" value="0.29936594202898553" />
<entry key="app/src/main/res/layout/activity_splash2.xml" value="0.25625" />
<entry key="app/src/main/res/layout/activity_test.xml" value="0.25625" />
<entry key="app/src/main/res/layout/bottom_sheet_ussd.xml" value="0.266796875" />
<entry key="app/src/main/res/layout/button_selector.xml" value="0.33242753623188404" />
<entry key="app/src/main/res/layout/fragment_action.xml" value="0.25625" />
......
......@@ -24,7 +24,11 @@
android:theme="@style/Theme.MobiUzAndroid"
android:usesCleartextTraffic="true"
tools:targetApi="m">
<activity
android:name=".dev.TestActivity"
android:exported="true" >
</activity>
<activity
android:name=".dev.SplashActivity"
android:configChanges="orientation"
......@@ -37,7 +41,6 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".dev.LanguageActivity"
android:configChanges="orientation"
......@@ -63,12 +66,6 @@
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name=".dev.BillingFragment"
android:configChanges="orientation"
android:exported="false"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
</application>
</manifest>
\ No newline at end of file
This diff is collapsed.
......@@ -5,7 +5,6 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
......@@ -16,10 +15,9 @@ import com.mobiuz.app.databinding.ActivityOfflineBinding
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.service.ServiceAdapter
import com.mobiuz.app.dev.ui.service.ServicesAdapter
import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.NetworkUtil
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
......@@ -30,7 +28,7 @@ class OfflineActivity : AppCompatActivity() {
private var _bn: ActivityOfflineBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var adapter: ServiceAdapter
private lateinit var adapter: ServicesAdapter
private lateinit var navController: NavController
private lateinit var receiver: BroadcastReceiver
private val intentFilter = IntentFilter()
......@@ -47,7 +45,7 @@ class OfflineActivity : AppCompatActivity() {
_bn = ActivityOfflineBinding.inflate(layoutInflater)
setContentView(bn.root)
adapter = ServiceAdapter(pref.language)
adapter = ServicesAdapter(pref.language)
pref.isShowPin = false
......
package com.mobiuz.app.dev
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mobiuz.app.R
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
}
}
\ No newline at end of file
......@@ -12,6 +12,9 @@ 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 dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import uz.agr.mobiuz.AGRBilling
import javax.inject.Inject
import javax.inject.Singleton
......@@ -23,47 +26,49 @@ class MainRepository @Inject constructor(
){
suspend fun mainIndex(): UiStateObject<Customer> {
return try {
val res = apiService.mainIndex()
when {
res.status && res.data != null -> {
UiStateObject.SUCCESS(res.data!!)
withContext(Dispatchers.IO){
val res = apiService.mainIndex()
withContext(Dispatchers.Main){
when {
res.status && res.data != null -> {
UiStateObject.SUCCESS(res.data!!)
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(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 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)
suspend fun logOut() {
try {
withContext(Dispatchers.IO){
AGRBilling.deleteAllCards()
AGRBilling.deleteAllMonitoring()
apiService.logOut()
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
e.printStackTrace()
}
}
suspend fun services(): UiStateObject<String> {
return try {
val res = apiService.getServices()
when {
res.status -> {
pref.services = Gson().toJson(res.data)
UiStateObject.SUCCESS(res.message)
withContext(Dispatchers.IO){
val res = apiService.getServices()
withContext(Dispatchers.Main){
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)
}
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
......@@ -71,14 +76,17 @@ class MainRepository @Inject constructor(
}
suspend fun mainRoaming(): UiStateObject<Roaming> {
return try {
val res = apiService.mainRoaming()
when {
res.status -> {
UiStateObject.SUCCESS(res.data!!)
withContext(Dispatchers.IO){
val res = apiService.mainRoaming()
withContext(Dispatchers.Main){
when {
res.status -> {
UiStateObject.SUCCESS(res.data!!)
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
}
}
res.errors.isNotEmpty() -> UiStateObject.ERROR(res.errors.getMessage())
else -> UiStateObject.ERROR(res.message)
}
} catch (e: Exception) {
UiStateObject.ERROR(e.userMessage(context))
......
......@@ -79,7 +79,7 @@ class AuthActivity : AppCompatActivity() {
}
CONSTANTS.TYPE_VERIFICATION -> {
navController.popBackStack()
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone , CONSTANTS.PIN_CODE to verificationCode), Utils.navOptions())
navController.navigate(R.id.verificationFragment, bundleOf(CONSTANTS.PHONE to phone , CONSTANTS.PIN_CODE to verificationCode), Utils.navOptions())
}
}
}
......
......@@ -54,7 +54,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
toolbar.setNavigationOnClickListener {
requireActivity().finish()
requireActivity().onBackPressed()
}
viewGroup.setOnClickListener(object : ButtonClick() {
......@@ -78,7 +78,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
inputPhone.setText(newText)
inputPhone.setSelection(oldText.checkChangedPosition(newText))
inputPhone.addTextChangedListener(this)
btnLogin.isEnabled = inputPhone.text.toString().trim().length == 12
btnCheckPhone.isEnabled = inputPhone.text.toString().trim().length == 12
}catch (e: Exception){
inputPhone.text.clear()
}
......@@ -86,7 +86,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
}
})
btnLogin.setOnClickListener(object : ButtonClick() {
btnCheckPhone.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
phone = "+998" + inputPhone.text.toString().trim().replace(" ","")
phoneRaw = "+998 " + inputPhone.text.toString().trim()
......
package com.mobiuz.app.dev.ui.auth.login
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.view.View
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
......@@ -26,7 +21,6 @@ import com.mobiuz.app.dev.ui.global.TextWatcherWrapper
import com.mobiuz.app.dev.utils.Utils
import com.mobiuz.app.dev.utils.extensions.checkInternet
import com.mobiuz.app.dev.utils.extensions.makeLinks
import com.mobiuz.app.dev.utils.extensions.showCustomDialog
import com.mobiuz.app.dev.utils.hideKeyboard
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
......@@ -58,8 +52,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
override fun setUpUI() {
bn.apply {
viewGroup.setOnClickListener(object : ButtonClick(){
viewGroup.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
bn.viewGroup.hideKeyboard()
}
......@@ -100,7 +93,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
)
}
else -> {
if(checkInternet()){
if (checkInternet()) {
viewModel.login(UserAuth(phone.filter { it.isDigit() }, password))
}
......@@ -122,7 +115,11 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
when (it) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(R.id.myVerificationFragment, bundleOf(CONSTANTS.PHONE to phone, CONSTANTS.PIN_CODE to it.data), Utils.navOptions())
navController.navigate(
R.id.verificationFragment,
bundleOf(CONSTANTS.PHONE to phone, CONSTANTS.PIN_CODE to it.data),
Utils.navOptions()
)
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
......@@ -142,7 +139,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(
R.id.myVerificationFragment,
R.id.verificationFragment,
bundleOf(
CONSTANTS.PHONE to phone,
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_FORGET,
......
......@@ -34,13 +34,13 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
private var _bn: FragmentInstallPinBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val data = ArrayList<PinData>()
private lateinit var biometricManager: BiometricManager
private val pinAdapter = InstallPinAdapter()
private var type = ""
private val data = ArrayList<PinData>()
private var titleText = ""
private var pinCode = ""
private var type = ""
private var count = 3
private lateinit var biometricManager: BiometricManager
override fun onCreate(savedInstanceState: Bundle?) {
......@@ -49,12 +49,12 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
type = it.getString(CONSTANTS.TYPE_PIN, "") ?: ""
pinCode = it.getString(CONSTANTS.PIN_CODE, "") ?: ""
}
biometricManager = BiometricManager.from(requireContext())
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentInstallPinBinding.bind(view)
biometricManager = BiometricManager.from(requireContext())
setUpUI()
collects()
......@@ -106,7 +106,8 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
pinAdapter.setOnDoneListener {
when (type) {
CONSTANTS.NEW_PIN -> {
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_NEW_PIN, CONSTANTS.PIN_CODE to it),
navController.navigate(R.id.installPinFragment,
bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_NEW_PIN, CONSTANTS.PIN_CODE to it),
Utils.navOptions())
}
CONSTANTS.CONFIRM_NEW_PIN -> {
......@@ -121,7 +122,8 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
}
CONSTANTS.CURRENT_PIN -> {
if(pref.pinCode == it){
navController.navigate(R.id.installPinFragment, bundleOf( CONSTANTS.TYPE_PIN to CONSTANTS.CHANGE_NEW_PIN), Utils.navOptions())
navController.navigate(R.id.installPinFragment,
bundleOf( CONSTANTS.TYPE_PIN to CONSTANTS.CHANGE_NEW_PIN), Utils.navOptions())
}else{
loadError()
}
......@@ -130,8 +132,9 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
if(pref.pinCode == it){
showMessage(getString(R.string.cannot_change_pin))
}else{
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_CHANGE_NEW_PIN, CONSTANTS.PIN_CODE to it), Utils
.navOptions())
navController.navigate(R.id.installPinFragment,
bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.CONFIRM_CHANGE_NEW_PIN, CONSTANTS.PIN_CODE to it),
Utils.navOptions())
}
}
CONSTANTS.CONFIRM_CHANGE_NEW_PIN -> {
......
......@@ -131,7 +131,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
})
btnLogin.setOnClickListener(object : ButtonClick() {
btnRegister.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
password = inputPassword.text.toString().trim()
confirmPassword = inputConfirm.text.toString().trim()
......@@ -157,7 +157,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
bn.apply {
password = inputPassword.text.toString().trim()
confirmPassword = inputConfirm.text.toString().trim()
btnLogin.isEnabled = (password.length > 3) && (password == confirmPassword)
btnRegister.isEnabled = (password.length > 3) && (password == confirmPassword)
txtCheckPassword.isVisible = password.length < 4
if (password.isNotEmpty() && confirmPassword.isNotEmpty()){
if (password == confirmPassword){
......@@ -184,7 +184,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
navController.navigate(
R.id.myVerificationFragment,
R.id.verificationFragment,
bundleOf(CONSTANTS.PHONE to phone, CONSTANTS.PIN_CODE to it.data),
Utils.navOptions()
)
......
......@@ -44,8 +44,8 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val viewModel: AuthViewModel by viewModels()
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var code = ""
private var verificationCode = ""
private var code = ""
private var phone = ""
......@@ -88,7 +88,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
setColorPins(getColorCompat(R.color.black100))
}
})
btnLogin.setOnClickListener(object : ButtonClick() {
btnVerification.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
getLinePinCodes()
val auth = UserAuth(phone.replace("+", "").replace(" ", ""), null, code)
......@@ -107,7 +107,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
coutdownView.setOnCountdownEndListener {
count(false)
}
setVerificationCode()
// setVerificationCode()
}
}
......@@ -121,7 +121,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
pin5.setText(verificationCode[4].toString())
pin6.setText(verificationCode[5].toString())
pin6.requestFocus()
btnLogin.isEnabled = true
btnVerification.isEnabled = true
}
}
}
......@@ -186,12 +186,12 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
if (s.toString().isNotEmpty()) {
if (i == pinView.childCount - 1) {
pin6.hideKeyboard()
btnLogin.isEnabled = true
btnVerification.isEnabled = true
} else pinView.getChildAt(i + 1).requestFocus()
this@apply.setBackgroundResource(R.drawable.bgn_ver_checked)
} else {
if (i == pinView.childCount - 1) {
btnLogin.isEnabled = false
btnVerification.isEnabled = false
}
this@apply.setBackgroundResource(R.drawable.bgn_ver_unchecked)
}
......@@ -239,9 +239,9 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
viewModel.resetSmsCodeUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
showToastMessage(it.data)
verificationCode = it.data
setVerificationCode()
// showToastMessage(it.data)
// verificationCode = it.data
// setVerificationCode()
count(true)
showProgressDialog(false)
}
......
......@@ -50,7 +50,9 @@ object CONSTANTS {
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 INTENT_ACTION_NAVIGATE = "INTENT_ACTION_NAVIGATE"
const val MY_CONNECTIVITY_CHANGE = "MY_CONNECTIVITY_CHANGE"
const val FRAGMENT_ID = "FRAGMENT_ID"
//password types
......
......@@ -13,7 +13,7 @@ import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class OfflineBottomSheet() : BottomSheetDialogFragment() {
class OfflineBottomSheet: BottomSheetDialogFragment() {
@Inject
lateinit var pref: SharedPref
......@@ -34,14 +34,14 @@ class OfflineBottomSheet() : BottomSheetDialogFragment() {
private fun setUpUI() {
bn.apply {
lng = pref.language
btnZapros.setOnClickListener(object : ButtonClick() {
btnToOfflineActivity.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
pref.isShowPin = false
navigate()
}
})
btnOtmena.setOnClickListener(object : ButtonClick() {
btnCancel.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
dismiss()
}
......
package com.mobiuz.app.dev
package com.mobiuz.app.dev.ui.home
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentBillingBinding
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.utils.LocaleHelper
import com.mobiuz.app.dev.utils.extensions.showMessage
import dagger.hilt.android.AndroidEntryPoint
import uz.agr.mobiuz.AGRBilling
import uz.agr.sdk.coreui.extension.showMessage
import javax.inject.Inject
@AndroidEntryPoint
......
......@@ -3,6 +3,7 @@ package com.mobiuz.app.dev.ui.home
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.FrameLayout
......@@ -17,16 +18,15 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.tabs.TabLayoutMediator
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentHomeBinding
import com.mobiuz.app.dev.BillingFragment
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.model.SharedPref
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.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.extensions.*
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import javax.inject.Inject
......@@ -77,6 +77,13 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
bn.apply {
slider.adapter = sliderAdapter
sliderAdapter.setOnClickListener {
val uri = Uri.parse(it)
val intent = Intent(Intent.ACTION_VIEW)
intent.data = uri
startActivity(intent)
}
TabLayoutMediator(tabIndicator, slider) { _, _ -> }.attach()
// lifecycleScope.launchWhenCreated {
......@@ -102,6 +109,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
btnAddSum.setOnClickListener {
pref.isShowPin = false
if(checkInternet()){
// requireActivity().sendBroadcast(Intent(CONSTANTS.INTENT_ACTION_NAVIGATE).putExtra(CONSTANTS.FRAGMENT_ID,R.id.billingFragment))
navController.navigate(R.id.billingFragment)
}
......@@ -212,10 +220,10 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
@SuppressLint("SetTextI18n")
private fun loadData() {
try {
// sliderAdapter.submitList(customer?.events ?: emptyList())
customer?.customer?.info?.let {
bn.apply {
// loadSum(it.balance?.amount?.toDouble(),it.balance?.currency)
txtBalance.text = "${it.balance?.amount?.toMoneyFormat()} ${it.balance?.currency}"
pref.userBirthday = customer?.customer?.date_of_birth ?: ""
it.counters?.let {
......@@ -246,18 +254,6 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
}
}
private fun loadSum(amount:Double?, currency:String?){
lifecycleScope.launchWhenCreated {
var i = 0.0
while (i < amount ?: 0.0){
delay(50)
i += 10000
bn.txtBalance.text = "${i.toMoneyFormat()} $currency"
}
}
}
override fun onResume() {
super.onResume()
mainViewModel.bottomSheet(true)
......
......@@ -4,21 +4,23 @@ import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import coil.load
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ItemHomeBinding
import com.mobiuz.app.dev.network.model.Events
import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.utils.extensions.SingleBlock
class SliderAdapter : RecyclerView.Adapter<SliderAdapter.SliderViewHolder>() {
private var listener: SingleBlock<Events>? = null
private val sliderItems: ArrayList<Events> = ArrayList()
private var listener: SingleBlock<String>? = 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)
ItemHomeBinding.inflate(LayoutInflater.from(parent.context), parent, false)
)
}
......@@ -35,16 +37,22 @@ class SliderAdapter : RecyclerView.Adapter<SliderAdapter.SliderViewHolder>() {
txtDescription.setTextColor(Color.WHITE)
txtDescription.text = itemView.context.getString(R.string.misic_all_with_you)
}
btnSeeMore.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
listener?.invoke(CONSTANTS.HTTP_MOBI_UZ)
}
})
}
}
}
fun setOnClickListener(block: SingleBlock<Events>) {
fun setOnClickListener(block: SingleBlock<String>) {
listener = block
}
fun submitList(ls: List<Events>) {
fun submitList(ls: List<String>) {
sliderItems.clear()
sliderItems.addAll(ls)
notifyDataSetChanged()
......
......@@ -5,30 +5,29 @@ import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.google.gson.Gson
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentActionBinding
import com.mobiuz.app.databinding.FragmentSendUssdBinding
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.global.CONSTANTS
import dagger.hilt.android.AndroidEntryPoint
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import javax.inject.Inject
@AndroidEntryPoint
class ActionFragment : BaseFragment(R.layout.fragment_action) {
class SendUssdFragment : BaseFragment(R.layout.fragment_send_ussd) {
@Inject
lateinit var pref: SharedPref
private lateinit var mainViewModel: MainViewModel
private var _bn: FragmentActionBinding? = null
private var _bn: FragmentSendUssdBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var adapter : ActionAdapter
private lateinit var adapter : UssdAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
adapter = ActionAdapter(pref.language)
adapter = UssdAdapter(pref.language)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
arguments?.let {
val arg = it.getString(CONSTANTS.SERVICE) ?: ""
......@@ -40,7 +39,7 @@ class ActionFragment : BaseFragment(R.layout.fragment_action) {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentActionBinding.bind(view)
_bn = FragmentSendUssdBinding.bind(view)
setUpUI()
collects()
......
......@@ -11,7 +11,7 @@ import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.utils.extensions.SingleBlock
import com.mobiuz.app.dev.utils.extensions.getCurrentName
class ServiceAdapter(val lang: String) : RecyclerView.Adapter<ServiceAdapter.VHolder>() {
class ServicesAdapter(val lang: String) : RecyclerView.Adapter<ServicesAdapter.VHolder>() {
private val list: ArrayList<ServiceData> by lazy { ArrayList() }
private var listener: SingleBlock<ServiceData>? = null
......
......@@ -10,32 +10,31 @@ import androidx.navigation.fragment.NavHostFragment
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentServiceBinding
import com.mobiuz.app.databinding.FragmentServicesBinding
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.model.ServiceData
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.CONSTANTS
import dagger.hilt.android.AndroidEntryPoint
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import javax.inject.Inject
@AndroidEntryPoint
class ServiceFragment : BaseFragment(R.layout.fragment_service) {
class ServicesFragment : BaseFragment(R.layout.fragment_services) {
@Inject
lateinit var pref: SharedPref
private lateinit var mainViewModel: MainViewModel
private var _bn: FragmentServiceBinding? = null
private var _bn: FragmentServicesBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var adapter: ServiceAdapter
private lateinit var adapter: ServicesAdapter
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private var type = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
adapter = ServiceAdapter(pref.language)
adapter = ServicesAdapter(pref.language)
arguments?.let {
type = it.getString(CONSTANTS.TYPE_SERVICE) ?: ""
......@@ -43,7 +42,7 @@ class ServiceFragment : BaseFragment(R.layout.fragment_service) {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentServiceBinding.bind(view)
_bn = FragmentServicesBinding.bind(view)
setUpUI()
collects()
......
......@@ -2,17 +2,16 @@ package com.mobiuz.app.dev.ui.service
import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.gson.Gson
import com.mobiuz.app.dev.model.ServiceData
import com.mobiuz.app.dev.ui.global.CONSTANTS
class FragmentPagerAdapter(fragment: Fragment, private val service: ServiceData): FragmentStateAdapter(fragment) {
class ServicesPagerAdapter(fragment: Fragment, private val service: ServiceData): FragmentStateAdapter(fragment) {
override fun getItemCount() = service.data.size
override fun createFragment(position: Int): Fragment {
return ActionFragment().apply {
return SendUssdFragment().apply {
this.arguments = bundleOf(CONSTANTS.SERVICE to Gson().toJson(service.data[position]))
}
}
......
......@@ -11,7 +11,7 @@ import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.utils.extensions.SingleBlock
import com.mobiuz.app.dev.utils.extensions.getCurrentName
class ActionAdapter(val lang: String) : RecyclerView.Adapter<ActionAdapter.VHolder>() {
class UssdAdapter(val lang: String) : RecyclerView.Adapter<UssdAdapter.VHolder>() {
private val list: ArrayList<UssdData> by lazy { ArrayList() }
private var listener: SingleBlock<UssdData>? = null
......
package com.mobiuz.app.dev.ui.service
import android.Manifest
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.telephony.PhoneStateListener
import android.telephony.TelephonyManager
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
......@@ -17,11 +13,9 @@ import com.mobiuz.app.databinding.BottomSheetUssdBinding
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.dev.utils.extensions.checkPermission
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.getCurrentName
import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
@AndroidEntryPoint
......@@ -53,7 +47,7 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
txtDescription.text = dec
txtCode.text = this.code
}
btnZapros.setOnClickListener(object : ButtonClick() {
btnSent.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
pref.isShowPin = false
checkPermission(Manifest.permission.CALL_PHONE) {
......@@ -62,8 +56,8 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
pref.isShowPin = false
var ussd = ""
data.code.forEach {
if(it == '#') ussd += Uri.encode("#")
else ussd+= it
if (it == '#') ussd += Uri.encode("#")
else ussd += it
}
val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:$ussd"))
startActivity(intent)
......
......@@ -27,7 +27,7 @@ class UssdFragment : BaseFragment(R.layout.fragment_ussd) {
@Inject
lateinit var pref: SharedPref
private var service: ServiceData? = null
private lateinit var adapter: FragmentPagerAdapter
private lateinit var adapter: ServicesPagerAdapter
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
override fun onCreate(savedInstanceState: Bundle?) {
......@@ -63,7 +63,7 @@ class UssdFragment : BaseFragment(R.layout.fragment_ussd) {
tabLayout.tabMode = MODE_SCROLLABLE
}
adapter = FragmentPagerAdapter(this@UssdFragment, it)
adapter = ServicesPagerAdapter(this@UssdFragment, it)
viewPager.adapter = adapter
TabLayoutMediator(bn.tabLayout, bn.viewPager) { tab, pos ->
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white100"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="false">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/test_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph_test"
tools:context=".dev.ui.auth.AuthActivity"/>
</LinearLayout>
\ No newline at end of file
......@@ -50,7 +50,7 @@
android:textSize="14sp" />
<Button
android:id="@+id/btn_zapros"
android:id="@+id/btn_sent"
style="@style/ButtonPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
......
......@@ -6,7 +6,7 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context=".dev.BillingFragment">
tools:context=".dev.ui.home.BillingFragment">
<com.google.android.material.appbar.MaterialToolbar
......
......@@ -85,7 +85,7 @@
android:layout_weight="1.5">
<Button
android:id="@+id/btn_login"
android:id="@+id/btn_check_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
......
This diff is collapsed.
......@@ -144,7 +144,7 @@
app:layout_constraintTop_toBottomOf="@id/txt_check_confirm" />
<Button
android:id="@+id/btn_login"
android:id="@+id/btn_register"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
......@@ -168,6 +168,6 @@
android:textColor="@color/grey80"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_login" />
app:layout_constraintTop_toBottomOf="@id/btn_register" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -172,12 +172,12 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_login" />
app:layout_constraintTop_toBottomOf="@+id/btn_verification" />
<Button
android:id="@+id/btn_login"
android:id="@+id/btn_verification"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
......
......@@ -44,6 +44,7 @@
<com.google.android.material.card.MaterialCardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_see_more"
android:layout_marginTop="16dp"
app:cardCornerRadius="4dp">
......
......@@ -26,7 +26,7 @@
<Button
android:id="@+id/btn_zapros"
android:id="@+id/btn_to_offline_activity"
style="@style/ButtonPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
......@@ -37,7 +37,7 @@
android:textSize="14sp" />
<TextView
android:id="@+id/btn_otmena"
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
......
......@@ -34,8 +34,20 @@
tools:layout="@layout/fragment_biometric" />
<fragment
android:id="@+id/myVerificationFragment"
android:id="@+id/verificationFragment"
android:name="com.mobiuz.app.dev.ui.auth.verification.VerificationFragment"
android:label="MyVerificationFragment" />
<fragment
android:id="@+id/mainFragment"
android:name="com.mobiuz.app.dev.MainFragment"
android:label="MainFragment" >
<deepLink
android:id="@+id/deepLink"
android:autoVerify="true"
app:uri="www.example.com/user/{userName}" />
<argument
android:name="userName"
app:argType="string" />
</fragment>
</navigation>
\ No newline at end of file
......@@ -44,7 +44,7 @@
<fragment
android:id="@+id/billingFragment"
android:name="com.mobiuz.app.dev.BillingFragment"
android:name="com.mobiuz.app.dev.ui.home.BillingFragment"
android:label="fragment_billing"
tools:layout="@layout/fragment_billing" />
......
......@@ -7,8 +7,8 @@
<fragment
android:id="@+id/serviceFragment"
tools:layout="@layout/fragment_service"
android:name="com.mobiuz.app.dev.ui.service.ServiceFragment"
tools:layout="@layout/fragment_services"
android:name="com.mobiuz.app.dev.ui.service.ServicesFragment"
android:label="MotionFragment" />
<fragment
android:id="@+id/ussdFragment"
......
......@@ -13,8 +13,8 @@
<fragment
android:id="@+id/serviceFragment"
tools:layout="@layout/fragment_service"
android:name="com.mobiuz.app.dev.ui.service.ServiceFragment"
tools:layout="@layout/fragment_services"
android:name="com.mobiuz.app.dev.ui.service.ServicesFragment"
android:label="MotionFragment" />
<fragment
android:id="@+id/ussdFragment"
......
<?xml version="1.0" encoding="utf-8"?>
<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"
android:id="@+id/nav_graph_test"
app:startDestination="@id/mainFragment2">
<fragment
android:id="@+id/mainFragment2"
android:name="com.mobiuz.app.dev.MainFragment"
android:label="MainFragment" />
<fragment
android:id="@+id/installPinFragment"
android:name="com.mobiuz.app.dev.ui.auth.pin.InstallPinFragment"
android:label="PinFragment"
tools:layout="@layout/fragment_install_pin" />
<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/securityFragment"
android:name="com.mobiuz.app.dev.ui.settings.security.SecurityFragment"
android:label="fragment_safety"
tools:layout="@layout/fragment_security" />
<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/changePasswordFragment"
android:name="com.mobiuz.app.dev.ui.settings.security.ChangePasswordFragment"
android:label="CurrentPasswordFragment" />
<fragment
android:id="@+id/billingFragment"
android:name="com.mobiuz.app.dev.ui.home.BillingFragment"
android:label="fragment_billing"
tools:layout="@layout/fragment_billing" />
<fragment
android:id="@+id/pinFragment"
tools:layout="@layout/fragment_pin"
android:name="com.mobiuz.app.dev.ui.global.PinFragment"
android:label="FullScreenFragment" />
</navigation>
\ No newline at end of file
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