Commit 7317c993 authored by shohboz's avatar shohboz

[UPD] MUS-212 Feature, updated services and ussd menu

parent ed67cd6a
package com.mobiuz.app.dev.ui
import android.content.BroadcastReceiver
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.core.view.GravityCompat
import androidx.fragment.app.viewModels
import androidx.lifecycle.LiveData
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.analytics.FirebaseAnalytics
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivityMainBinding
import com.mobiuz.app.dev.MainViewModel
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.auth.AuthActivity
import com.mobiuz.app.dev.ui.base.BaseFragment
import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.settings.SettingsActivity
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.customMasketHome
import com.mobiuz.app.dev.utils.extensions.setupWithNavController
import com.mobiuz.app.dev.utils.extensions.showCustomExitDialog
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import javax.inject.Inject
@AndroidEntryPoint
class MainFragment : BaseFragment(R.layout.fragment_main) {
@Inject
lateinit var pref: SharedPref
private var _bn: ActivityMainBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var bottomNavigationView: BottomNavigationView
private var currentNavController: LiveData<NavController>? = null
private val viewModel: MainViewModel by viewModels()
private lateinit var receiver: BroadcastReceiver
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = ActivityMainBinding.bind(view)
if (savedInstanceState == null) {
setupBottomNavigationBar()
}
setUpUI()
collects()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_bn = ActivityMainBinding.inflate(layoutInflater)
if (savedInstanceState == null) {
setupBottomNavigationBar()
}
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
header.txtUserPhone.text = pref.userPhone.customMasketHome()
customLog("lang:${pref.language}")
when (pref.language) {
CONSTANTS.UZ -> txtLanguage.text = getString(R.string.uzbek)
CONSTANTS.RU -> txtLanguage.text = getString(R.string.russian)
CONSTANTS.EN -> txtLanguage.text = getString(R.string.english)
}
btnExit.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
showCustomExitDialog {
pref.clearUserData()
val intent = Intent(requireContext(), AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
requireActivity().finish()
}
}
})
btnLanguage.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen("")
}
})
btnSupport.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen(CONSTANTS.SUPPORT)
}
})
btnSafety.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen(CONSTANTS.SAFETY)
}
})
header.headerLayout.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
navigateToSettingsScreen(CONSTANTS.PROFILE)
}
})
txtRedactData.setOnClickListener {
}
txtPublicOferta.setOnClickListener {
}
txtConfidensialnost.setOnClickListener {
}
}
}
private fun navigateToSettingsScreen(key: String) {
val intent = Intent(requireContext(), SettingsActivity::class.java)
intent.putExtra(CONSTANTS.TYPE_SETTINGS, key)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
}
override fun collects() {
lifecycleScope.launchWhenStarted {
viewModel.mainIndexUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
bn.drawerLayout.openDrawer(GravityCompat.START)
}
else -> Unit
}
}
}
lifecycleScope.launchWhenStarted {
viewModel.userNameUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
pref.userName = it.data
bn.header.txtUserName.text = it.data
bn.header.txtAvatar.text = it.data[0].toString()
}
else -> Unit
}
}
}
}
private fun setupBottomNavigationBar() {
try {
bottomNavigationView = requireActivity().findViewById(R.id.bottom_nav_view)
val navGraphIds = listOf(
R.navigation.nav_graph_home,
R.navigation.nav_graph_profile
)
val controller = bottomNavigationView.setupWithNavController(
navGraphIds = navGraphIds,
fragmentManager = parentFragmentManager,
containerId = R.id.nav_host_fragment,
intent = requireActivity().intent
)
currentNavController = controller
} catch (e: Exception) {
e.printStackTrace()
}
requireActivity()
}
fun onSupportNavigateUp(): Boolean {
return currentNavController?.value?.navigateUp() ?: false
}
override fun onDestroy() {
_bn = null
// unregisterReceiver(receiver)
super.onDestroy()
}
}
\ No newline at end of file
...@@ -16,6 +16,7 @@ import com.mobiuz.app.dev.ui.global.ButtonClick ...@@ -16,6 +16,7 @@ import com.mobiuz.app.dev.ui.global.ButtonClick
import com.mobiuz.app.dev.utils.extensions.getCurrentName import com.mobiuz.app.dev.utils.extensions.getCurrentName
import com.mobiuz.app.utils.checkPermission import com.mobiuz.app.utils.checkPermission
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import java.lang.Exception
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
...@@ -46,9 +47,15 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() { ...@@ -46,9 +47,15 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
} }
btnZapros.setOnClickListener(object : ButtonClick() { btnZapros.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
pref.isShowPin = false
checkPermission(Manifest.permission.CALL_PHONE) { checkPermission(Manifest.permission.CALL_PHONE) {
val ussd = data.code.replace("#","") + Uri.encode("#") try {
requireActivity().startActivity(Intent(Intent.ACTION_CALL, Uri.parse("tel:$ussd"))) pref.isShowPin = false
val ussd = data.code.replace("#","") + Uri.encode("#")
startActivity(Intent(Intent.ACTION_CALL, Uri.parse("tel:$ussd")))
}catch (e:Exception){
pref.isShowPin = false
}
dismiss() dismiss()
} }
} }
......
package com.mobiuz.app.dev.ui.settings
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivitySettingsBinding
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.global.FullScreenDialog
import com.mobiuz.app.dev.utils.LocaleHelper
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class SettingsActivity : AppCompatActivity() {
private var _bn: ActivitySettingsBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var navController: NavController
@Inject
lateinit var pref: SharedPref
override fun onCreate(savedInstanceState: Bundle?) {
LocaleHelper.setLocale(this)
super.onCreate(savedInstanceState)
_bn = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(bn.root)
window.statusBarColor = Color.WHITE
val window = window.decorView
window.systemUiVisibility = window.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
val fragment = supportFragmentManager.findFragmentById(R.id.settings_container) as NavHostFragment
navController = NavHostFragment.findNavController(fragment)
intent?.let {
when (it.getStringExtra(CONSTANTS.TYPE_SETTINGS)) {
CONSTANTS.PROFILE -> {
navController.popBackStack()
navController.navigate(R.id.profileFragment)
}
CONSTANTS.SUPPORT -> {
navController.popBackStack()
navController.navigate(R.id.supportFragment)
}
CONSTANTS.SAFETY -> {
navController.popBackStack()
navController.navigate(R.id.safetyFragment)
}
else -> Unit
}
}
}
override fun onResume() {
super.onResume()
if(pref.isShowPin){
showPinCode()
}else{
pref.isShowPin = true
}
}
private fun showPinCode() {
intent?.let {
val arg = it.getStringExtra(CONSTANTS.FIRST) ?: ""
if (arg.isEmpty()) {
val dialog = FullScreenDialog()
dialog.setOnPinDoneListener {
finish()
pref.clearUserData()
val intent = Intent(this, AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
dialog.dismiss()
}
dialog.show(supportFragmentManager, "tag")
}
it.removeExtra(CONSTANTS.FIRST)
}
}
override fun onDestroy() {
pref.isShowPin = false
_bn = null
super.onDestroy()
}
}
\ No newline at end of file
<?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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="false">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/settings_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_offline"
tools:context=".dev.ui.auth.AuthActivity"/>
</LinearLayout>
...@@ -53,6 +53,6 @@ ...@@ -53,6 +53,6 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_margin="24dp" android:layout_margin="24dp"
android:paddingVertical="12dp" android:paddingVertical="12dp"
android:text="Запросить" android:text="@string/send"
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.MobiUzAndroid" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>
\ 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