Integration of get user data api call on SplashFragment
BottomNav on HomeActivity Worked on sidebar menu - sidebar implementation - ui for user data - theme switching - language switching
This commit is contained in:
@@ -1,30 +1,97 @@
|
||||
package com.woka.home
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Gravity
|
||||
import android.view.View.GONE
|
||||
import android.view.View.VISIBLE
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.GravityCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.Observer
|
||||
import com.bumptech.glide.Glide
|
||||
import com.woka.R
|
||||
import com.woka.WokaApp.Companion.userPrefs
|
||||
import com.woka.databinding.ActivityHomeBinding
|
||||
import com.woka.mvvm.userDataModels.UserDataResponse
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.utils.TAG
|
||||
import kotlinx.coroutines.launch
|
||||
import com.woka.utils.UserType
|
||||
import com.woka.utils.WokaBaseActivity
|
||||
import com.woka.utils.toast
|
||||
|
||||
class HomeActivity : AppCompatActivity() {
|
||||
class HomeActivity : WokaBaseActivity(), Observer<ApiResult<UserDataResponse>> {
|
||||
|
||||
private lateinit var binding: ActivityHomeBinding
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
setContentView(R.layout.activity_home)
|
||||
binding = ActivityHomeBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
|
||||
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
|
||||
Log.d(TAG, "onCreate: ${userPrefs?.userType} ${userPrefs?.accessToken}")
|
||||
userPrefs?.userLiveData?.observe(this, this)
|
||||
|
||||
initViews()
|
||||
|
||||
clickEvents()
|
||||
}
|
||||
|
||||
private fun initViews() {
|
||||
binding.apply {
|
||||
|
||||
bottomNav.setOnItemSelectedListener {
|
||||
if (bottomNav.selectedItemId != it.itemId)
|
||||
toast(it.title.toString())
|
||||
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun clickEvents() {
|
||||
binding.apply {
|
||||
sideMenu.setOnClickListener {
|
||||
homeDrawer.openDrawer(GravityCompat.END)
|
||||
}
|
||||
|
||||
closeDrawer.setOnClickListener {
|
||||
homeDrawer.closeDrawer(GravityCompat.END)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChanged(value: ApiResult<UserDataResponse>) {
|
||||
when(value){
|
||||
is ApiResult.Error -> {}
|
||||
is ApiResult.Loading -> {}
|
||||
is ApiResult.Success -> {
|
||||
Log.d(TAG, "onChanged: ${value.data?.result}")
|
||||
value.data?.result?.let {
|
||||
binding.apply {
|
||||
|
||||
it.avtar?.let {
|
||||
Glide.with(this@HomeActivity)
|
||||
.load(it)
|
||||
.placeholder(R.drawable.profile_placeholder)
|
||||
.error(R.drawable.profile_placeholder)
|
||||
.into(sbUserImage)
|
||||
}
|
||||
|
||||
sbUserName.text = it.fullname
|
||||
sbBtn.text = getString(R.string.logout)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@ data class UserData(
|
||||
val child_detail: ChildDetail?,
|
||||
val email: String?,
|
||||
val fullname: String?,
|
||||
val gender: Gender?,
|
||||
val gender: String?,
|
||||
val id: Int?,
|
||||
val is_active: String?,
|
||||
val language: Language?,
|
||||
|
||||
@@ -1,23 +1,36 @@
|
||||
package com.woka.onboard.fragments
|
||||
|
||||
import android.animation.Animator
|
||||
import android.content.Intent
|
||||
import android.media.MediaPlayer
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.Animation
|
||||
import android.view.animation.Animation.AnimationListener
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.FragmentNavigatorExtras
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.woka.R
|
||||
import com.woka.WokaApp.Companion.userPrefs
|
||||
import com.woka.databinding.FragmentSplashBinding
|
||||
import com.woka.home.HomeActivity
|
||||
import com.woka.mvvm.userDataModels.UserDataResponse
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.utils.TAG
|
||||
import com.woka.utils.UserType
|
||||
import com.woka.utils.toast
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
/*
|
||||
Root fragment to the launcher activity i.e. WelcomeActivity
|
||||
*/
|
||||
class SplashFragment : Fragment() {
|
||||
class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>> {
|
||||
|
||||
private lateinit var binding: FragmentSplashBinding
|
||||
|
||||
@@ -38,11 +51,10 @@ class SplashFragment : Fragment() {
|
||||
|
||||
animateLogo()
|
||||
|
||||
lifecycleScope.launch {
|
||||
delay(6000)
|
||||
val extras = FragmentNavigatorExtras(binding.logo to "logo")
|
||||
findNavController().navigate(R.id.action_splashFragment_to_languageFragment,
|
||||
null, null, extras)
|
||||
if (userPrefs?.userType == UserType.CHILD || userPrefs?.userType == UserType.GUARDIAN){
|
||||
// some type of user is logged in
|
||||
// thus, loading data
|
||||
userPrefs?.loadUserData()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +66,25 @@ class SplashFragment : Fragment() {
|
||||
private fun animateLogo() {
|
||||
binding.logo.animate().scaleXBy(1f).scaleYBy(1f)
|
||||
.setDuration(2000)
|
||||
.setListener(object : Animator.AnimatorListener{
|
||||
override fun onAnimationStart(animation: Animator) {}
|
||||
override fun onAnimationEnd(animation: Animator) {
|
||||
lifecycleScope.launch {
|
||||
delay(2000)
|
||||
if (userPrefs?.userType == UserType.NONE || userPrefs?.userType == UserType.GUEST){
|
||||
// no user or guest is logged in
|
||||
goForward()
|
||||
}else{
|
||||
// some user is logged in listening to user data
|
||||
userPrefs?.userLiveData?.removeObserver(this@SplashFragment)
|
||||
userPrefs?.userLiveData?.observe(viewLifecycleOwner, this@SplashFragment)
|
||||
}
|
||||
}
|
||||
}
|
||||
override fun onAnimationCancel(animation: Animator) {}
|
||||
override fun onAnimationRepeat(animation: Animator) {}
|
||||
|
||||
})
|
||||
.start()
|
||||
}
|
||||
|
||||
@@ -63,4 +94,35 @@ class SplashFragment : Fragment() {
|
||||
player?.release()
|
||||
player = null
|
||||
}
|
||||
|
||||
private fun goForward(){
|
||||
if (userPrefs?.userType == UserType.NONE){
|
||||
// none of the user is logged in
|
||||
// going through normal onboard process
|
||||
val extras = FragmentNavigatorExtras(binding.logo to "logo")
|
||||
findNavController().navigate(R.id.action_splashFragment_to_languageFragment,
|
||||
null, null, extras)
|
||||
}else{
|
||||
// going to home activity as any of the user is logged in
|
||||
activity?.let {
|
||||
startActivity(Intent(it, HomeActivity::class.java).apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
|
||||
})
|
||||
it.finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChanged(value: ApiResult<UserDataResponse>) {
|
||||
// on user data loaded
|
||||
when (value){
|
||||
is ApiResult.Error -> {
|
||||
toast(value.errorMessage)
|
||||
}
|
||||
is ApiResult.Loading -> {}
|
||||
is ApiResult.Success -> {
|
||||
goForward()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user