Commit ec7de180 authored by shohboz's avatar shohboz

[UPD] MUS-107 Feature, updated home page drawer

parent 267301d2
package com.mobiuz.app.dev
import android.Manifest
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.lifecycle.LiveData
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.FirebaseApp
......@@ -14,12 +16,14 @@ import com.google.firebase.messaging.FirebaseMessaging
import com.mobiuz.app.R
import com.mobiuz.app.databinding.ActivityMainBinding
import com.mobiuz.app.dev.model.SharedPref
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.ui.global.CONSTANTS
import com.mobiuz.app.dev.ui.global.FullScreenDialog
import com.mobiuz.app.dev.utils.extensions.customLog
import com.mobiuz.app.dev.utils.extensions.setupWithNavController
import com.mobiuz.app.utils.checkPermission
import com.mobiuz.app.dev.utils.extensions.showCustomExitDialog
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import javax.inject.Inject
......@@ -34,6 +38,7 @@ class MainActivity : AppCompatActivity() {
private lateinit var bottomNavigationView: BottomNavigationView
private var currentNavController: LiveData<NavController>? = null
private val viewModel: MainViewModel by viewModels()
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
......@@ -56,23 +61,98 @@ class MainActivity : AppCompatActivity() {
setupBottomNavigationBar()
}
// intent?.let {
// val arg = it.getStringExtra(CONSTANTS.FIRST) ?: ""
// if (arg.isEmpty()) {
// val dialog = FullScreenDialog()
// dialog.setOnPinDoneListener {
// pref.setUserToken("")
// pref.isRegistered = false
// pref.pin_code = ""
// val intent = Intent(this, AuthActivity::class.java)
// intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
// startActivity(intent)
// finish()
// }
// dialog.show(supportFragmentManager, "tag")
// }
// }
setUpUI()
collects()
intent?.let {
val arg = it.getStringExtra(CONSTANTS.FIRST) ?: ""
if (arg.isEmpty()) {
val dialog = FullScreenDialog()
dialog.setOnPinDoneListener {
pref.setUserToken("")
pref.isRegistered = false
pref.pin_code = ""
val intent = Intent(this, AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
finish()
}
dialog.show(supportFragmentManager, "tag")
}
}
customLog("token: ${pref.getUserToken()}")
}
private fun setUpUI() {
bn.apply {
header.txtUserPhone.text = pref.userPhone
btnExit.setOnClickListener {
showCustomExitDialog {
pref.setUserToken("")
pref.isRegistered = false
pref.pin_code = ""
val intent = Intent(this@MainActivity, AuthActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
startActivity(intent)
finish()
bn.drawerLayout.closeDrawer(GravityCompat.START)
}
}
btnLanguage.setOnClickListener {
bn.drawerLayout.closeDrawer(GravityCompat.START)
}
btnSafety.setOnClickListener {
bn.drawerLayout.closeDrawer(GravityCompat.START)
}
btnSupport.setOnClickListener {
bn.drawerLayout.closeDrawer(GravityCompat.START)
}
}
}
private 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 -> {
bn.header.txtUserName.text = it.data
}
else -> Unit
}
}
}
lifecycleScope.launchWhenStarted {
viewModel.swipeDrawerUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
if (it.data) {
bn.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
} else {
bn.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
}
}
else -> Unit
}
}
}
}
private fun setupBottomNavigationBar() {
......
package com.mobiuz.app.dev
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.mobiuz.app.dev.network.model.Customer
import com.mobiuz.app.dev.network.model.UiStateObject
import com.mobiuz.app.dev.network.repository.AuthRepository
import com.mobiuz.app.dev.network.repository.MainRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class MainViewModel @Inject constructor(
private val repository: MainRepository
) : ViewModel() {
private val _swipeDrawerUiState = MutableStateFlow<UiStateObject<Boolean>>(UiStateObject.EMPTY)
val swipeDrawerUiState: StateFlow<UiStateObject<Boolean>> = _swipeDrawerUiState
fun isSwipeDrawer(swipe: Boolean){
_swipeDrawerUiState.value = UiStateObject.SUCCESS(swipe)
}
private val _userNameUiState = MutableStateFlow<UiStateObject<String>>(UiStateObject.EMPTY)
val userNameUiState: StateFlow<UiStateObject<String>> = _userNameUiState
fun setUserName(name: String){
_userNameUiState.value = UiStateObject.SUCCESS(name)
}
private val _mainIndexUiState = MutableStateFlow<UiStateObject<Long>>(UiStateObject.EMPTY)
val mainIndexUiState: StateFlow<UiStateObject<Long>> = _mainIndexUiState
fun mainIndex(status:Long) = viewModelScope.launch {
_mainIndexUiState.value = UiStateObject.SUCCESS(status)
// _mainIndexUiState.value = repository.mainIndex()
}
}
\ No newline at end of file
package com.mobiuz.app.dev
import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.mobiuz.app.R
import com.mobiuz.app.dev.network.model.Customer
import com.mobiuz.app.dev.ui.base.BaseFragment
class MotionFragment : BaseFragment(R.layout.home_motion) {
private lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mainViewModel.isSwipeDrawer(false)
}
override fun setUpUI() {
......
......@@ -133,6 +133,7 @@ class AuthRepository @Inject constructor(
when {
res.status -> {
pref.isRegistered = true
pref.setUserToken(res.data?.token)
UiStateObject.SUCCESS(res.message)
}
......
......@@ -12,10 +12,12 @@ import androidx.core.view.GravityCompat
import androidx.core.view.isVisible
import androidx.core.widget.NestedScrollView
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.mobiuz.app.R
import com.mobiuz.app.databinding.FragmentHomeBinding
import com.mobiuz.app.dev.AuthActivity
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
......@@ -36,17 +38,19 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
private var _bn: FragmentHomeBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private val viewModel: HomeViewModel by viewModels()
private lateinit var mainViewModel: MainViewModel
private var customer: Customer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java]
viewModel.mainIndex()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentHomeBinding.bind(view)
mainViewModel.isSwipeDrawer(true)
setUpUI()
collects()
......@@ -55,52 +59,24 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
override fun setUpUI() {
bn.apply {
btnExit.setOnClickListener {
showCustomExitDialog {
pref.setUserToken("")
pref.isRegistered = false
pref.pin_code = ""
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 {
}
btnSafety.setOnClickListener {
}
btnSupport.setOnClickListener {
}
}
bn.content.apply {
toolbar.setNavigationOnClickListener {
bn.drawerLayout.openDrawer(GravityCompat.START)
mainViewModel.mainIndex(System.currentTimeMillis())
}
nestedScrollView.setOnScrollChangeListener(object : NestedScrollView.OnScrollChangeListener{
override fun onScrollChange(v: NestedScrollView?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) {
Log.e("SSS","scrollX_"+scrollX+"_scrollY_"+scrollY+"_oldScrollX_"+oldScrollX+"_oldScrollY_"+oldScrollY)
nestedScrollView.setOnScrollChangeListener(
NestedScrollView.OnScrollChangeListener {
v, scrollX, scrollY, oldScrollX, oldScrollY ->
if(scrollY > 100){
if(scrollY > 120){
toolbarInsideLayout.isVisible = true
// requireActivity().window.statusBarColor = Color.RED
// toolbar.setBackgroundColor(resources.getColor(R.color.primary100))
// requireActivity().window.statusBarColor = Color.RED
// toolbar.setBackgroundColor(resources.getColor(R.color.primary100))
}
if(scrollY < 90){
if(scrollY < 100){
toolbarInsideLayout.isVisible = false
// requireActivity().window.statusBarColor = Color.TRANSPARENT
// toolbar.setBackgroundColor(Color.TRANSPARENT)
}
// requireActivity().window.statusBarColor = Color.TRANSPARENT
// toolbar.setBackgroundColor(Color.TRANSPARENT)
}
})
}
......@@ -133,7 +109,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
try {
customLog("customer:$customer")
customer?.customer?.info?.let {
bn.content.apply {
bn.apply {
txtBalance.text = "${it.balance?.amount?.toMoneyFormat()} ${it.balance?.currency}"
it.counters.let {
txtCountMb.text = it?.BYTE?.value?.toMoneyFormat() ?: "0"
......@@ -145,11 +121,10 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
txtCountSms.text = it?.ITEM?.value?.toMoneyFormat() ?: "0"
txtTypeSms.text = it?.ITEM?.unit ?: "sms"
}
bn.header.txtUserName.text = customer?.customer?.name ?: ""
mainViewModel.setUserName(customer?.customer?.name ?: "Unnamed User")
txtTarif.text = customer?.customer?.tarifi?.name ?: getString(R.string.my_tarif)
txtMyNumber.text = pref.userPhone
toolbarMyNumber.text = pref.userPhone
bn.header.txtUserPhone.text = pref.userPhone
}
}
} catch (e: Exception) {
......
......@@ -81,6 +81,14 @@ fun Fragment.showCustomExitDialog(block: () -> Unit) {
dialog.show(childFragmentManager, "childFragmentManager")
}
fun FragmentActivity.showCustomExitDialog(block: () -> Unit) {
val dialog = ExitDialog()
dialog.setOnDoneListener {
block()
}
dialog.show(supportFragmentManager, "childFragmentManager")
}
//fun Fragment.showCustomDialog(string: String, status: Boolean, block: () -> Unit) {
// val snackBar = Snackbar.make(this.requireView(),string, Snackbar.LENGTH_LONG)
// .setBackgroundTint(Color.GRAY)
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.drawerlayout.widget.DrawerLayout 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:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:fitsSystemWindows="false"
xmlns:app="http://schemas.android.com/apk/res-auto">
tools:openDrawer="start">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
......@@ -24,7 +30,175 @@
app:itemTextColor="@color/nav_item_tint"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_nav_menu" />
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
android:layout_gravity="start"
android:background="@color/white100">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/header"
layout="@layout/layout_home_header"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<View
android:layout_width="match_parent"
android:background="@color/grey30"
android:layout_marginTop="@dimen/_14sdp"
android:layout_height="1dp"/>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:paddingVertical="16dp"
android:paddingStart="30dp"
android:paddingEnd="10dp"
android:background="?android:selectableItemBackground"
android:id="@+id/btn_safety"
android:layout_marginTop="@dimen/_24sdp"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:src="@drawable/ic_safety"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="@string/bezopasnost"
android:textStyle="bold"
android:textSize="16sp"
android:layout_marginStart="10dp"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:paddingVertical="10dp"
android:id="@+id/btn_language"
android:paddingStart="30dp"
android:paddingEnd="10dp"
android:background="?android:selectableItemBackground"
android:layout_marginTop="@dimen/_10sdp"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_image_language"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:text="@string/language_app"
android:textStyle="bold"
android:textSize="16sp"
android:layout_marginStart="10dp"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="Русский"
android:textSize="12sp"
android:textColor="@color/grey80"
android:layout_marginStart="10dp"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:paddingVertical="16dp"
android:id="@+id/btn_support"
android:paddingStart="30dp"
android:paddingEnd="10dp"
android:background="?android:selectableItemBackground"
android:layout_marginTop="@dimen/_10sdp"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:src="@drawable/ic_image_support"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="@string/support"
android:textStyle="bold"
android:textSize="16sp"
android:layout_marginStart="10dp"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="16dp"
android:paddingStart="30dp"
android:layout_marginBottom="16dp"
android:paddingEnd="10dp"
android:id="@+id/btn_exit"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_log_out" />
<TextView
android:id="@+id/txt_user_name"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginStart="12dp"
android:layout_height="wrap_content"
android:text="@string/exit"
android:layout_gravity="center"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_user_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="v 0.01.1"
android:textColor="@color/grey80"
android:layout_gravity="center"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.navigation.NavigationView>
</LinearLayout>
\ No newline at end of file
</androidx.drawerlayout.widget.DrawerLayout>
This diff is collapsed.
This diff is collapsed.
......@@ -2,13 +2,14 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:padding="32dp"
android:paddingHorizontal="@dimen/_12sdp"
android:layout_height="match_parent">
android:layout_height="wrap_content">
<ImageView
android:layout_width="84dp"
android:src="@drawable/ic_user"
android:layout_marginTop="@dimen/_24sdp"
android:layout_marginTop="20dp"
android:layout_height="84dp"/>
<TextView
android:layout_width="wrap_content"
......
......@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph_auth"
app:startDestination="@id/myVerificationFragment">
app:startDestination="@id/checkPhoneFragment">
<fragment
android:id="@+id/checkPhoneFragment"
......
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