diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 728b9b3..701e14b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,12 @@
android:supportsRtl="true"
android:theme="@style/Theme.Woka"
tools:targetApi="31">
+
+
{
- progressView.hide()
- toast(it.errorMessage)
- }
- is ApiResult.Loading -> {
- progressView.show(getString(R.string.logging_you_out))
- }
- is ApiResult.Success -> {
- startActivity(Intent(this, OnboardActivity::class.java).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
- })
- finish()
-
- userPrefs?.logout()
- }
- null -> {}
- }
- }
-
- minuteReceiver = object : BroadcastReceiver(){
- override fun onReceive(context: Context?, intent: Intent?) {
- // this function is called every minute
- if (intent?.action == Intent.ACTION_TIME_TICK){
- updateBackground()
- }
- }
- }
-
- registerReceiver(minuteReceiver, IntentFilter(Intent.ACTION_TIME_TICK))
+ setObservers()
initViews()
@@ -161,6 +131,61 @@ class HomeActivity : WokaBaseActivity(),
unregisterReceiver(minuteReceiver)
}
+ private fun setObservers(){
+ userPrefs?.userLiveData?.observe(this, this)
+
+ viewModel.logoutLiveData.observe(this){
+ when(it){
+ is ApiResult.Error -> {
+ progressView.hide()
+ toast(it.errorMessage)
+ }
+ is ApiResult.Loading -> {
+ progressView.show(getString(R.string.logging_you_out))
+ }
+ is ApiResult.Success -> {
+ startActivity(Intent(this, OnboardActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ })
+ finish()
+
+ userPrefs?.logout()
+ }
+ null -> {}
+ }
+ }
+
+ viewModel.deActivateLiveData.observe(this){
+ when(it){
+ is ApiResult.Error -> {
+ progressView.hide()
+ toast(it.errorMessage)
+ }
+ is ApiResult.Loading -> progressView.show()
+ is ApiResult.Success -> {
+ startActivity(Intent(this, OnboardActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ })
+ finish()
+
+ userPrefs?.logout()
+ }
+ null -> {}
+ }
+ }
+
+ minuteReceiver = object : BroadcastReceiver(){
+ override fun onReceive(context: Context?, intent: Intent?) {
+ // this function is called every minute
+ if (intent?.action == Intent.ACTION_TIME_TICK){
+ updateBackground()
+ }
+ }
+ }
+
+ registerReceiver(minuteReceiver, IntentFilter(Intent.ACTION_TIME_TICK))
+ }
+
private fun initViews() {
binding.apply {
val versionName = "VER ${BuildConfig.VERSION_NAME}"
@@ -180,7 +205,12 @@ class HomeActivity : WokaBaseActivity(),
getString(R.string.login_register)
}else{
- // hiding menu options
+ // showing menu options
+ val type = userPrefs?.userType
+ if (userPrefs?.userType == UserType.GUARDIAN){
+ sbAddChild.show()
+ }
+
sbDeActivateAccount.show()
sbMyOrders.show()
sbMyProfile.show()
@@ -276,6 +306,31 @@ class HomeActivity : WokaBaseActivity(),
startActivity(Intent(this@HomeActivity, SupportActivity::class.java),
ActivityOptions.makeSceneTransitionAnimation(this@HomeActivity).toBundle())
}
+
+ sbMyProfileCard.setOnClickListener {
+ startActivity(Intent(this@HomeActivity, UserProfileActivity::class.java))
+ }
+
+ sbAddChildCard.setOnClickListener {
+ startActivity(Intent(this@HomeActivity, OnboardActivity::class.java)
+ .apply {
+ putExtra(ONBOARD_ACTIVITY_INTENT, ADD_CHILD_INTENT)
+ })
+ }
+
+ sbDeActivateAccountCard.setOnClickListener {
+ decisionDialog.apply {
+ title = getString(R.string.deactivate_woka_account)
+ message =
+ getString(R.string.by_clicking_on_the_button_below_your_account_will_get_deactivated_your_data_will_be_erased_after_a_month)
+ setPositiveButton(getString(R.string.yes)){
+ viewModel.deActivateAccount()
+ }
+ setNegativeButton(getString(R.string.no))
+ show()
+ }
+ }
+
}
}
diff --git a/app/src/main/java/com/woka/home/HomeViewModel.kt b/app/src/main/java/com/woka/home/HomeViewModel.kt
index fa69c48..50c9e98 100644
--- a/app/src/main/java/com/woka/home/HomeViewModel.kt
+++ b/app/src/main/java/com/woka/home/HomeViewModel.kt
@@ -9,16 +9,12 @@ import androidx.lifecycle.viewModelScope
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem
import com.woka.home.BottomNavigation.Companion.HOME
-import com.woka.mvvm.UserApiService
-import com.woka.mvvm.UserRepository
import com.woka.networking.ApiResult
-import com.woka.networking.RetrofitHelper
+import com.woka.userdata.UserRepository
import kotlinx.coroutines.launch
class HomeViewModel: ViewModel(){
- private val userRepository = UserRepository(RetrofitHelper.getRetrofit().create(UserApiService::class.java))
-
var selectedBottomTab: Int = HOME
var isHomeBackgroundBlurred: Boolean = false
@@ -30,6 +26,10 @@ class HomeViewModel: ViewModel(){
val logoutLiveData: LiveData?>
get() = _logoutLiveData
+ private val _deActivateLiveData = MutableLiveData?>()
+ val deActivateLiveData: LiveData?>
+ get() = _deActivateLiveData
+
var player: ExoPlayer? = null
fun initPlayer(context: Context) {
@@ -51,7 +51,14 @@ class HomeViewModel: ViewModel(){
fun logout(){
viewModelScope.launch {
_logoutLiveData.postValue(ApiResult.Loading())
- _logoutLiveData.postValue(userRepository.logout())
+ _logoutLiveData.postValue(UserRepository.logout())
+ }
+ }
+
+ fun deActivateAccount(){
+ viewModelScope.launch {
+ _deActivateLiveData.postValue(ApiResult.Loading())
+ _deActivateLiveData.postValue(UserRepository.deActivateAccount())
}
}
diff --git a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt
index 288ed3e..55c1bad 100644
--- a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt
+++ b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt
@@ -8,7 +8,6 @@ import android.content.Context
import android.content.Intent
import android.content.Intent.ACTION_TIME_TICK
import android.content.IntentFilter
-import android.net.Uri
import android.os.Bundle
import android.util.DisplayMetrics
import android.view.LayoutInflater
@@ -17,15 +16,13 @@ import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
-import com.google.android.exoplayer2.ExoPlayer
-import com.google.android.exoplayer2.MediaItem
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.FragmentHome1Binding
import com.woka.home.HomeViewModel
import com.woka.home.MoreHomeActivity
import com.woka.home.TimePeriod
-import com.woka.mvvm.userDataModels.UserDataResponse
+import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.networking.ApiResult
import com.woka.players.LiveStreamPlayerActivity
import com.woka.utils.UserType
diff --git a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt
index 617fd47..0e4caed 100644
--- a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt
+++ b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt
@@ -1,24 +1,17 @@
package com.woka.home.fragments
import android.content.Intent
-import android.graphics.Bitmap
-import android.graphics.Canvas
-import android.media.MediaMetadataRetriever
-import android.net.Uri
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
-import android.view.TextureView
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
-import com.google.android.exoplayer2.ExoPlayer
-import com.google.android.exoplayer2.MediaItem
import com.woka.R
import com.woka.WokaApp
import com.woka.databinding.FragmentHome2Binding
import com.woka.home.HomeViewModel
-import com.woka.mvvm.userDataModels.UserDataResponse
+import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.networking.ApiResult
import com.woka.players.LiveStreamPlayerActivity
import com.woka.utils.UserType
diff --git a/app/src/main/java/com/woka/home/sidebar/profile/ProfileViewModel.kt b/app/src/main/java/com/woka/home/sidebar/profile/ProfileViewModel.kt
new file mode 100644
index 0000000..cb64efe
--- /dev/null
+++ b/app/src/main/java/com/woka/home/sidebar/profile/ProfileViewModel.kt
@@ -0,0 +1,25 @@
+package com.woka.home.sidebar.profile
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.woka.networking.ApiResult
+import com.woka.userdata.UserRepository
+import kotlinx.coroutines.launch
+
+class ProfileViewModel: ViewModel() {
+
+ private val _updateProfileLiveData = MutableLiveData>()
+ val updateProfileLiveData: LiveData>
+ get() = _updateProfileLiveData
+
+ fun updateProfile(email: String, name: String, gender: String){
+ viewModelScope.launch {
+ _updateProfileLiveData.postValue(ApiResult.Loading())
+ _updateProfileLiveData.postValue(UserRepository.updateProfile(
+ name, email, gender
+ ))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt b/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt
new file mode 100644
index 0000000..ae742c6
--- /dev/null
+++ b/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt
@@ -0,0 +1,186 @@
+package com.woka.home.sidebar.profile
+
+import android.graphics.Color
+import android.os.Bundle
+import android.transition.Slide
+import android.view.Gravity.END
+import androidx.activity.enableEdgeToEdge
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.woka.R
+import com.woka.WokaApp.Companion.userPrefs
+import com.woka.databinding.ActivityUserProfileBinding
+import com.woka.userdata.userDataModels.UserData
+import com.woka.networking.ApiResult
+import com.woka.utils.Gender
+import com.woka.utils.ProgressView
+import com.woka.utils.WokaBaseActivity
+import com.woka.utils.hide
+import com.woka.utils.toast
+
+class UserProfileActivity : WokaBaseActivity() {
+
+ private lateinit var binding: ActivityUserProfileBinding
+
+ private lateinit var viewModel: ProfileViewModel
+
+ private lateinit var progressView: ProgressView
+
+ private var selectedGender = Gender.NONE
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ binding = ActivityUserProfileBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+
+ viewModel = ViewModelProvider(this)[ProfileViewModel::class.java]
+ progressView = ProgressView(this, getString(R.string.please_wait))
+
+ clickEvents()
+
+ setObservers()
+ }
+
+ private fun clickEvents() {
+ binding.apply {
+ genderM.setOnClickListener { selectGender(Gender.MALE) }
+ genderF.setOnClickListener { selectGender(Gender.FEMALE) }
+
+ backBtn.setOnClickListener {
+ onBackPressedDispatcher.onBackPressed()
+ }
+
+ update.setOnClickListener {
+ if (allOkay()){
+ viewModel.updateProfile(
+ email = email.text.toString(),
+ name = fullName.text.toString(),
+ gender = if (selectedGender == Gender.MALE) {
+ "2"
+ }else{
+ "1"
+ }
+ )
+ }
+ }
+ }
+ }
+
+ private fun setObservers() {
+ userPrefs?.userLiveData?.observe(this){
+ when(it){
+ is ApiResult.Error -> {
+ binding.main.hide()
+ toast(it.errorMessage)
+ }
+ is ApiResult.Loading -> {}
+ is ApiResult.Success -> {
+ it.data?.result?.let { userData ->
+ updateUserData(userData)
+ }
+ }
+ null -> {}
+ }
+ }
+
+ viewModel.updateProfileLiveData.observe(this){
+ when(it){
+ is ApiResult.Error -> {
+ progressView.hide()
+ toast(it.errorMessage)
+ }
+ is ApiResult.Loading -> progressView.show()
+ is ApiResult.Success -> {
+ progressView.hide()
+ toast(it.message)
+
+ val userData = userPrefs?.userData?.copy(
+ fullname = binding.fullName.text.toString()
+ )
+ userPrefs?.updateUserData(userData)
+ }
+ }
+ }
+
+ }
+
+ private fun allOkay(): Boolean{
+ var allOkay = true
+
+ binding.apply {
+ if (fullName.text.isEmpty()){
+ allOkay = false
+ fullName.error = getString(R.string.required)
+ }
+
+ if (selectedGender == Gender.NONE){
+ allOkay = false
+ toast(getString(R.string.select_a_gender))
+ }
+ }
+
+ return allOkay
+ }
+
+ private fun updateUserData(userData: UserData){
+ binding.apply {
+ val userName = ", ${userData.username}"
+ userUsername.text = userName
+
+ userData.avtar?.let {
+ Glide.with(this@UserProfileActivity)
+ .load(it)
+ .placeholder(android.R.color.darker_gray)
+ .placeholder(R.drawable.profile_placeholder)
+ .into(profileImage)
+ }
+
+ fullName.setText(userData.fullname)
+
+ email.text = userData.email
+
+ birthdate.text = userData.birthdate
+
+ }
+ }
+
+ private fun selectGender(gender: Gender) {
+ binding.apply {
+ when (gender) {
+ Gender.MALE -> {
+ genderM.setCardBackgroundColor(Color.WHITE)
+ genderM.cardElevation = 5f
+
+ genderF.setCardBackgroundColor(resources.getColor(R.color.white_50))
+ genderF.cardElevation = 0f
+ }
+
+ Gender.FEMALE -> {
+ genderF.setCardBackgroundColor(Color.WHITE)
+ genderF.cardElevation = 5f
+
+ genderM.setCardBackgroundColor(resources.getColor(R.color.white_50))
+ genderM.cardElevation = 0f
+ }
+
+ Gender.NONE -> {
+ genderM.setCardBackgroundColor(resources.getColor(R.color.white_50))
+ genderM.cardElevation = 0f
+
+ genderF.setCardBackgroundColor(resources.getColor(R.color.white_50))
+ genderF.cardElevation = 0f
+ }
+ }
+ }
+
+ selectedGender = gender
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/home/sidebar/support/SupportActivity.kt b/app/src/main/java/com/woka/home/sidebar/support/SupportActivity.kt
index 8092125..a563263 100644
--- a/app/src/main/java/com/woka/home/sidebar/support/SupportActivity.kt
+++ b/app/src/main/java/com/woka/home/sidebar/support/SupportActivity.kt
@@ -1,9 +1,11 @@
package com.woka.home.sidebar.support
+import android.annotation.SuppressLint
import android.os.Bundle
import android.transition.Slide
import android.util.Patterns
import android.view.Gravity
+import android.view.MotionEvent
import android.widget.ArrayAdapter
import androidx.activity.enableEdgeToEdge
import androidx.core.view.ViewCompat
@@ -67,12 +69,15 @@ class SupportActivity : WokaBaseActivity() {
is ApiResult.Success -> {
progressView.hide()
toast(it.message)
+
+ onBackPressedDispatcher.onBackPressed()
}
null -> {}
}
}
}
+ @SuppressLint("ClickableViewAccessibility")
private fun initViews() {
binding.apply {
@@ -93,6 +98,19 @@ class SupportActivity : WokaBaseActivity() {
)
subjectSpinner.setAdapter(adapter)
+
+ message.setOnTouchListener { v, event ->
+ if (message.hasFocus()) {
+ v.parent.requestDisallowInterceptTouchEvent(true)
+ when (event.action and MotionEvent.ACTION_MASK) {
+ MotionEvent.ACTION_SCROLL -> {
+ v.parent.requestDisallowInterceptTouchEvent(false)
+ return@setOnTouchListener true
+ }
+ }
+ }
+ false
+ }
}
}
diff --git a/app/src/main/java/com/woka/modules/ModuleApiService.kt b/app/src/main/java/com/woka/modules/ModuleApiService.kt
index 070087c..09f01eb 100644
--- a/app/src/main/java/com/woka/modules/ModuleApiService.kt
+++ b/app/src/main/java/com/woka/modules/ModuleApiService.kt
@@ -20,6 +20,6 @@ interface ModuleApiService {
@POST("guest_queries_store")
suspend fun supportForGuest(@Body body: FormBody): Response>
- @POST("guest_queries_store")
+ @POST("user_queries_store")
suspend fun supportForUser(@Body body: FormBody): Response>
}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/modules/ModuleRepository.kt b/app/src/main/java/com/woka/modules/ModuleRepository.kt
index 764aa62..f01384c 100644
--- a/app/src/main/java/com/woka/modules/ModuleRepository.kt
+++ b/app/src/main/java/com/woka/modules/ModuleRepository.kt
@@ -23,7 +23,7 @@ object ModuleRepository {
suspend fun supportForUser(userId: String, subject: String, message: String): ApiResult {
return RetrofitHelper.handleApiCall {
- moduleApiService.supportForGuest(
+ moduleApiService.supportForUser(
FormBody.Builder()
.add("user_id", userId)
.add("subject", subject)
diff --git a/app/src/main/java/com/woka/mvvm/UserApiService.kt b/app/src/main/java/com/woka/mvvm/UserApiService.kt
deleted file mode 100644
index e838f39..0000000
--- a/app/src/main/java/com/woka/mvvm/UserApiService.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.woka.mvvm
-
-import com.woka.mvvm.userDataModels.UserDataResponse
-import com.woka.networking.ApiResponse
-import retrofit2.Response
-import retrofit2.http.GET
-
-interface UserApiService {
-
- @GET("get_user_data")
- suspend fun getUserData(): Response>
-
- @GET("user_logout")
- suspend fun logout(): Response>
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/mvvm/UserRepository.kt b/app/src/main/java/com/woka/mvvm/UserRepository.kt
deleted file mode 100644
index ba7b66d..0000000
--- a/app/src/main/java/com/woka/mvvm/UserRepository.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.woka.mvvm
-
-import com.woka.mvvm.userDataModels.UserDataResponse
-import com.woka.networking.ApiResult
-import com.woka.networking.RetrofitHelper.handleApiCall
-
-class UserRepository(private val userApiService: UserApiService) {
-
- suspend fun getUserData(): ApiResult{
- return handleApiCall{
- userApiService.getUserData()
- }
- }
-
- suspend fun logout(): ApiResult{
- return handleApiCall {
- userApiService.logout()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/onboard/OnboardActivity.kt b/app/src/main/java/com/woka/onboard/OnboardActivity.kt
index 0ce9797..d0bb162 100644
--- a/app/src/main/java/com/woka/onboard/OnboardActivity.kt
+++ b/app/src/main/java/com/woka/onboard/OnboardActivity.kt
@@ -8,6 +8,13 @@ import androidx.core.view.WindowInsetsCompat
import androidx.navigation.NavOptions
import androidx.navigation.fragment.NavHostFragment
import com.woka.R
+import com.woka.WokaApp.Companion.userPrefs
+import com.woka.onboard.fragments.GetCodeFragment
+import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG
+import com.woka.onboard.fragments.GetEmailFragment
+import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16
+import com.woka.onboard.fragments.SignUpFragment
+import com.woka.onboard.fragments.SignUpFragment.Companion.ADD_CHILD_EVENT
import com.woka.utils.WokaBaseActivity
class OnboardActivity : WokaBaseActivity() {
@@ -16,6 +23,8 @@ class OnboardActivity : WokaBaseActivity() {
const val ONBOARD_ACTIVITY_INTENT = "onboard_act_intent"
const val LOG_IN_INTENT = "login_intent"
+
+ const val ADD_CHILD_INTENT = "add_child_intent"
}
private var player: MediaPlayer? = null
@@ -40,6 +49,20 @@ class OnboardActivity : WokaBaseActivity() {
.setPopUpTo(R.id.onboardFragment, true)
.build()
)
+ }else if (intent.getStringExtra(ONBOARD_ACTIVITY_INTENT) == ADD_CHILD_INTENT){
+ val hostFragment =
+ supportFragmentManager.findFragmentById(R.id.fc_onboard) as NavHostFragment
+ hostFragment.navController.navigate(
+ R.id.action_onboardFragment_to_signUpFragment,
+ Bundle().apply {
+ putBoolean(IS_UNDER_16, true)
+ putString(EMAIL_ARG, userPrefs?.userData?.email)
+ putBoolean(ADD_CHILD_EVENT, true)
+ },
+ NavOptions.Builder()
+ .setPopUpTo(R.id.onboardFragment, true)
+ .build()
+ )
}
player = MediaPlayer.create(this, R.raw.audiotwo)
diff --git a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt
index 86c1688..242e3d7 100644
--- a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt
@@ -9,20 +9,26 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.lifecycleScope
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.FragmentSelectAvatarBinding
import com.woka.home.HomeActivity
import com.woka.networking.ApiResult
+import com.woka.networking.RetrofitHelper
import com.woka.onboard.AvatarAdapter
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16
import com.woka.onboard.models.Avatar
import com.woka.onboard.models.RegisterRequestData
import com.woka.onboard.mvvm.OnboardViewModel
+import com.woka.userdata.UserRepository
import com.woka.utils.Gender
import com.woka.utils.ProgressView
import com.woka.utils.UserType
import com.woka.utils.toast
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.Locale
@@ -47,7 +53,7 @@ class SelectAvatarFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
- ): View? {
+ ): View {
binding = FragmentSelectAvatarBinding.inflate(inflater, container, false)
activity?.let {
viewModel = ViewModelProvider(it)[OnboardViewModel::class.java]
@@ -133,23 +139,32 @@ class SelectAvatarFragment : Fragment() {
progressView.show(getString(R.string.please_wait))
}
is ApiResult.Success -> {
- progressView.hide()
+
activity?.let {activity ->
toast(it.message)
it.data?.result?.let { result->
+ lifecycleScope.launch {
+ // logging out
+ if (userPrefs?.userType == UserType.GUARDIAN || userPrefs?.userType == UserType.CHILD){
+ progressView.show(getString(R.string.logging_you_out))
+ UserRepository.logout()
+ }
- // saving to user prefs
- userPrefs?.accessToken = result.remember_token?:"no_token_received"
- userPrefs?.userType = UserType.createUserType(result.user_type)
+ // saving to user prefs
+ userPrefs?.accessToken = result.remember_token?:"no_token_received"
+ userPrefs?.userType = UserType.createUserType(result.user_type)
- userPrefs?.loadUserData()
+ userPrefs?.loadUserData()
- startActivity(Intent(activity, HomeActivity::class.java).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
- })
- activity.finish()
+ progressView.hide()
+ startActivity(Intent(activity, HomeActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ })
+ activity.finish()
+ }
}
+ progressView.hide()
}
}
null -> {}
diff --git a/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt
index 232ae42..67979a5 100644
--- a/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt
@@ -33,6 +33,8 @@ class SignInFragment : Fragment() {
private lateinit var dialog: DecisionDialog
+ private lateinit var deactivatedDialog: DecisionDialog
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -59,6 +61,21 @@ class SignInFragment : Fragment() {
setNegativeButton(getString(R.string.no))
}
+
+ deactivatedDialog = DecisionDialog(it).apply {
+ title = getString(R.string.activate_woka_account)
+ message = getString(R.string.would_you_like_to_re_activate_your_account)
+
+ setPositiveButton(getString(R.string.yes)){
+ viewModel.loginProceed(
+ binding.username.text.toString(),
+ binding.password.text.toString(),
+ true
+ )
+ }
+
+ setNegativeButton(getString(R.string.no))
+ }
}
clickEvents()
@@ -80,7 +97,9 @@ class SignInFragment : Fragment() {
is ApiResult.Success -> {
progressView.hide()
it.data?.result?.let {data->
- if (data.already_logged_in){
+ if (data.is_deactive){
+ deactivatedDialog.show()
+ }else if (data.already_logged_in){
dialog.show()
}else{
toast(it.message)
diff --git a/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt
index a7430ce..ebf6bf4 100644
--- a/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt
@@ -1,5 +1,6 @@
package com.woka.onboard.fragments
+import android.graphics.Color
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
@@ -20,13 +21,26 @@ import com.woka.utils.PARENT_TYPE
import com.woka.utils.ProgressView
import com.woka.utils.toast
+/*
+ This fragment is opened for two intents
+
+ 1. The normal registration flow
+ 2. Adding child from home
+
+ */
class SignUpFragment : Fragment() {
+ companion object{
+ const val ADD_CHILD_EVENT = "add_child_event"
+ }
+
private lateinit var binding: FragmentSignUpBinding
private var isUnder16 = false
private var email: String? = null
+ private var addChildIntent = false
+
private lateinit var viewModel: OnboardViewModel
private lateinit var progressView: ProgressView
@@ -35,6 +49,7 @@ class SignUpFragment : Fragment() {
arguments?.let {
isUnder16 = it.getBoolean(IS_UNDER_16, false)
email = it.getString(EMAIL_ARG)
+ addChildIntent = it.getBoolean(ADD_CHILD_EVENT, false)
}
}
@@ -47,6 +62,7 @@ class SignUpFragment : Fragment() {
activity?.let {
viewModel = ViewModelProvider(it)[OnboardViewModel::class.java]
progressView = ProgressView(it)
+ it.window?.statusBarColor = Color.parseColor("#6ed5fe")
}
initViews()
@@ -101,13 +117,22 @@ class SignUpFragment : Fragment() {
private fun initViews() {
binding.apply {
- if (isUnder16) {
+ if (isUnder16 && !addChildIntent) {
doNotShare.visibility = VISIBLE
}
name.setText(viewModel.name)
username.setText(viewModel.userName)
password.setText(viewModel.password)
+
+ if (addChildIntent){
+ title.text = getString(R.string.add_child_account)
+ usernameTitle.text = getString(R.string.username)
+ nameTitle.text = getString(R.string.child_name)
+ passwordTitle.text = getString(R.string.password)
+
+ viewModel.email = email
+ }
}
}
diff --git a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt
index f903bb7..1c20e24 100644
--- a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt
@@ -4,12 +4,9 @@ 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
@@ -19,9 +16,8 @@ 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.userdata.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
diff --git a/app/src/main/java/com/woka/onboard/models/LoginResponse.kt b/app/src/main/java/com/woka/onboard/models/LoginResponse.kt
index c30c67f..d40f9d0 100644
--- a/app/src/main/java/com/woka/onboard/models/LoginResponse.kt
+++ b/app/src/main/java/com/woka/onboard/models/LoginResponse.kt
@@ -1,6 +1,6 @@
package com.woka.onboard.models
-import com.woka.mvvm.userDataModels.UserData
+import com.woka.userdata.userDataModels.UserData
data class LoginResponse(
val result: UserData?
diff --git a/app/src/main/java/com/woka/onboard/models/RegisterResponse.kt b/app/src/main/java/com/woka/onboard/models/RegisterResponse.kt
index 827e42c..6212f95 100644
--- a/app/src/main/java/com/woka/onboard/models/RegisterResponse.kt
+++ b/app/src/main/java/com/woka/onboard/models/RegisterResponse.kt
@@ -1,6 +1,6 @@
package com.woka.onboard.models
-import com.woka.mvvm.userDataModels.UserData
+import com.woka.userdata.userDataModels.UserData
data class RegisterResponse(
val result: UserData
diff --git a/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt b/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt
index c18bf3f..65627e2 100644
--- a/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt
+++ b/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt
@@ -33,12 +33,13 @@ class OnboardRepository(private val apiService: OnboardApiService) {
}
}
- suspend fun loginProceed(userName: String, password: String): ApiResult {
+ suspend fun loginProceed(userName: String, password: String, isActivate: Boolean): ApiResult {
return handleApiCall {
apiService.loginProceed(
FormBody.Builder()
.add("username", userName)
.add("password", password)
+ .add("is_activate", if (isActivate) "1" else "0")
.build()
)
}
diff --git a/app/src/main/java/com/woka/onboard/mvvm/OnboardViewModel.kt b/app/src/main/java/com/woka/onboard/mvvm/OnboardViewModel.kt
index cb28cd3..cdc792f 100644
--- a/app/src/main/java/com/woka/onboard/mvvm/OnboardViewModel.kt
+++ b/app/src/main/java/com/woka/onboard/mvvm/OnboardViewModel.kt
@@ -141,10 +141,10 @@ class OnboardViewModel: ViewModel(){
}
}
- fun loginProceed(userName: String, password: String){
+ fun loginProceed(userName: String, password: String, isActivate: Boolean = false){
viewModelScope.launch {
_loginProceedLiveData.postValue(ApiResult.Loading())
- val response = repository.loginProceed(userName, password)
+ val response = repository.loginProceed(userName, password, isActivate)
_loginProceedLiveData.postValue(response)
}
}
diff --git a/app/src/main/java/com/woka/userPreference/UserPreference.kt b/app/src/main/java/com/woka/userPreference/UserPreference.kt
index 5c78152..7720199 100644
--- a/app/src/main/java/com/woka/userPreference/UserPreference.kt
+++ b/app/src/main/java/com/woka/userPreference/UserPreference.kt
@@ -4,17 +4,14 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.Context.MODE_PRIVATE
import android.content.SharedPreferences
-import android.provider.Settings
import android.provider.Settings.Secure
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.woka.home.Theme
-import com.woka.mvvm.UserApiService
-import com.woka.mvvm.UserRepository
-import com.woka.mvvm.userDataModels.UserData
-import com.woka.mvvm.userDataModels.UserDataResponse
import com.woka.networking.ApiResult
-import com.woka.networking.RetrofitHelper
+import com.woka.userdata.UserRepository
+import com.woka.userdata.userDataModels.UserData
+import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.utils.UserType
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -38,6 +35,27 @@ class UserPreference(context: Context) {
val deviceId: String = Secure.getString(context.contentResolver, Secure.ANDROID_ID)
var userData: UserData? = null
+ private set
+
+ fun updateUserData(userData: UserData?){
+ when (val currentData = userLiveData.value){
+ is ApiResult.Error -> {}
+ is ApiResult.Loading -> {}
+ is ApiResult.Success -> {
+ _userLiveData.postValue(
+ ApiResult.Success(
+ UserDataResponse(
+ userData,
+ currentData.data?.userNotificationsCount
+ )
+ )
+ )
+
+ this.userData = userData
+ }
+ null -> {}
+ }
+ }
var appLanguage: String
get() = userPrefs.getString(APP_LANGUAGE, "en") ?: "en"
@@ -58,9 +76,6 @@ class UserPreference(context: Context) {
get() = userPrefs.getString(GUEST_USER_NAME, null)
set(value) = userPrefs.edit().putString(GUEST_USER_NAME, value).apply()
- private val userRepository =
- UserRepository(RetrofitHelper.getRetrofit().create(UserApiService::class.java))
-
private val _userLiveData = MutableLiveData?>()
val userLiveData: LiveData?>
get() = _userLiveData
@@ -68,7 +83,7 @@ class UserPreference(context: Context) {
fun loadUserData() {
CoroutineScope(Dispatchers.IO).launch {
_userLiveData.postValue(ApiResult.Loading())
- val result = userRepository.getUserData()
+ val result = UserRepository.getUserData()
when (result){
is ApiResult.Error -> {}
diff --git a/app/src/main/java/com/woka/userdata/UserApiService.kt b/app/src/main/java/com/woka/userdata/UserApiService.kt
new file mode 100644
index 0000000..608fae6
--- /dev/null
+++ b/app/src/main/java/com/woka/userdata/UserApiService.kt
@@ -0,0 +1,24 @@
+package com.woka.userdata
+
+import com.woka.userdata.userDataModels.UserDataResponse
+import com.woka.networking.ApiResponse
+import okhttp3.FormBody
+import retrofit2.Response
+import retrofit2.http.Body
+import retrofit2.http.GET
+import retrofit2.http.POST
+
+interface UserApiService {
+
+ @GET("get_user_data")
+ suspend fun getUserData(): Response>
+
+ @GET("user_logout")
+ suspend fun logout(): Response>
+
+ @POST("update_profile")
+ suspend fun updateProfile(@Body formBody: FormBody): Response>
+
+ @GET("user_deactivate_account")
+ suspend fun deActivateAccount(): Response>
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/userdata/UserRepository.kt b/app/src/main/java/com/woka/userdata/UserRepository.kt
new file mode 100644
index 0000000..380d33f
--- /dev/null
+++ b/app/src/main/java/com/woka/userdata/UserRepository.kt
@@ -0,0 +1,42 @@
+package com.woka.userdata
+
+import com.woka.userdata.userDataModels.UserDataResponse
+import com.woka.networking.ApiResult
+import com.woka.networking.RetrofitHelper
+import com.woka.networking.RetrofitHelper.handleApiCall
+import okhttp3.FormBody
+
+object UserRepository {
+
+ private val userApiService = RetrofitHelper.getRetrofit().create(UserApiService::class.java)
+
+ suspend fun getUserData(): ApiResult{
+ return handleApiCall{
+ userApiService.getUserData()
+ }
+ }
+
+ suspend fun logout(): ApiResult{
+ return handleApiCall {
+ userApiService.logout()
+ }
+ }
+
+ suspend fun updateProfile(name: String, email: String, gender: String): ApiResult{
+ return handleApiCall {
+ userApiService.updateProfile(
+ FormBody.Builder()
+ .add("fullname", name)
+ .add("email", email)
+ .add("gender", gender)
+ .build()
+ )
+ }
+ }
+
+ suspend fun deActivateAccount(): ApiResult{
+ return handleApiCall {
+ userApiService.deActivateAccount()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/mvvm/userDataModels/ChildDetail.kt b/app/src/main/java/com/woka/userdata/userDataModels/ChildDetail.kt
similarity index 77%
rename from app/src/main/java/com/woka/mvvm/userDataModels/ChildDetail.kt
rename to app/src/main/java/com/woka/userdata/userDataModels/ChildDetail.kt
index 02a6e68..3ee163b 100644
--- a/app/src/main/java/com/woka/mvvm/userDataModels/ChildDetail.kt
+++ b/app/src/main/java/com/woka/userdata/userDataModels/ChildDetail.kt
@@ -1,4 +1,4 @@
-package com.woka.mvvm.userDataModels
+package com.woka.userdata.userDataModels
data class ChildDetail(
val avatar_name: String?,
diff --git a/app/src/main/java/com/woka/mvvm/userDataModels/Gender.kt b/app/src/main/java/com/woka/userdata/userDataModels/Gender.kt
similarity index 61%
rename from app/src/main/java/com/woka/mvvm/userDataModels/Gender.kt
rename to app/src/main/java/com/woka/userdata/userDataModels/Gender.kt
index a63687d..8d93a93 100644
--- a/app/src/main/java/com/woka/mvvm/userDataModels/Gender.kt
+++ b/app/src/main/java/com/woka/userdata/userDataModels/Gender.kt
@@ -1,4 +1,4 @@
-package com.woka.mvvm.userDataModels
+package com.woka.userdata.userDataModels
data class Gender(
val gender_name: String?,
diff --git a/app/src/main/java/com/woka/mvvm/userDataModels/InterestTopic.kt b/app/src/main/java/com/woka/userdata/userDataModels/InterestTopic.kt
similarity index 63%
rename from app/src/main/java/com/woka/mvvm/userDataModels/InterestTopic.kt
rename to app/src/main/java/com/woka/userdata/userDataModels/InterestTopic.kt
index 715954f..d35aa8a 100644
--- a/app/src/main/java/com/woka/mvvm/userDataModels/InterestTopic.kt
+++ b/app/src/main/java/com/woka/userdata/userDataModels/InterestTopic.kt
@@ -1,4 +1,4 @@
-package com.woka.mvvm.userDataModels
+package com.woka.userdata.userDataModels
data class InterestTopic(
val id: Int?,
diff --git a/app/src/main/java/com/woka/mvvm/userDataModels/Language.kt b/app/src/main/java/com/woka/userdata/userDataModels/Language.kt
similarity index 62%
rename from app/src/main/java/com/woka/mvvm/userDataModels/Language.kt
rename to app/src/main/java/com/woka/userdata/userDataModels/Language.kt
index 03e445e..f76c060 100644
--- a/app/src/main/java/com/woka/mvvm/userDataModels/Language.kt
+++ b/app/src/main/java/com/woka/userdata/userDataModels/Language.kt
@@ -1,4 +1,4 @@
-package com.woka.mvvm.userDataModels
+package com.woka.userdata.userDataModels
data class Language(
val id: Int?,
diff --git a/app/src/main/java/com/woka/mvvm/userDataModels/UserData.kt b/app/src/main/java/com/woka/userdata/userDataModels/UserData.kt
similarity index 86%
rename from app/src/main/java/com/woka/mvvm/userDataModels/UserData.kt
rename to app/src/main/java/com/woka/userdata/userDataModels/UserData.kt
index fe39ab0..61972ac 100644
--- a/app/src/main/java/com/woka/mvvm/userDataModels/UserData.kt
+++ b/app/src/main/java/com/woka/userdata/userDataModels/UserData.kt
@@ -1,7 +1,8 @@
-package com.woka.mvvm.userDataModels
+package com.woka.userdata.userDataModels
data class UserData(
val already_logged_in: Boolean,
+ val is_deactive: Boolean,
val avtar: String?,
val birthdate: String?,
val child_detail: ChildDetail?,
diff --git a/app/src/main/java/com/woka/mvvm/userDataModels/UserDataResponse.kt b/app/src/main/java/com/woka/userdata/userDataModels/UserDataResponse.kt
similarity index 78%
rename from app/src/main/java/com/woka/mvvm/userDataModels/UserDataResponse.kt
rename to app/src/main/java/com/woka/userdata/userDataModels/UserDataResponse.kt
index 3915879..c3b5d30 100644
--- a/app/src/main/java/com/woka/mvvm/userDataModels/UserDataResponse.kt
+++ b/app/src/main/java/com/woka/userdata/userDataModels/UserDataResponse.kt
@@ -1,4 +1,4 @@
-package com.woka.mvvm.userDataModels
+package com.woka.userdata.userDataModels
data class UserDataResponse(
val result: UserData?,
diff --git a/app/src/main/java/com/woka/mvvm/userDataModels/UserNotificationData.kt b/app/src/main/java/com/woka/userdata/userDataModels/UserNotificationData.kt
similarity index 89%
rename from app/src/main/java/com/woka/mvvm/userDataModels/UserNotificationData.kt
rename to app/src/main/java/com/woka/userdata/userDataModels/UserNotificationData.kt
index aa1d3c1..d43364a 100644
--- a/app/src/main/java/com/woka/mvvm/userDataModels/UserNotificationData.kt
+++ b/app/src/main/java/com/woka/userdata/userDataModels/UserNotificationData.kt
@@ -1,4 +1,4 @@
-package com.woka.mvvm.userDataModels
+package com.woka.userdata.userDataModels
data class UserNotificationData(
val created_at: String?,
diff --git a/app/src/main/java/com/woka/utils/Gender.kt b/app/src/main/java/com/woka/utils/Gender.kt
index 78a930c..f30bffe 100644
--- a/app/src/main/java/com/woka/utils/Gender.kt
+++ b/app/src/main/java/com/woka/utils/Gender.kt
@@ -1,5 +1,5 @@
package com.woka.utils
-enum class Gender(value: Int){
+enum class Gender(val value: Int){
MALE(0), FEMALE(1), NONE(-1)
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_pen.xml b/app/src/main/res/drawable/ic_pen.xml
new file mode 100644
index 0000000..7db1006
--- /dev/null
+++ b/app/src/main/res/drawable/ic_pen.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
index 0321101..71d4c4b 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -452,68 +452,101 @@
-
- android:visibility="gone"
+
- android:foreground="?android:attr/selectableItemBackground"
- />
+
-
- android:visibility="gone"
+
- android:foreground="?android:attr/selectableItemBackground"
- />
+
-
- android:visibility="gone"
+
- android:foreground="?android:attr/selectableItemBackground"
- />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_sign_up.xml b/app/src/main/res/layout/fragment_sign_up.xml
index a61c38c..40a5e64 100644
--- a/app/src/main/res/layout/fragment_sign_up.xml
+++ b/app/src/main/res/layout/fragment_sign_up.xml
@@ -72,6 +72,7 @@
/>
+
Submit
Email
Name
+ Update profile
+ Full name
+ Your birthdate
+ Update
+ Add child account
+ CHILD NAME
+ Enter your child\'s name
+ Add child account
+ DeActivate WOKA account?
+ By clicking on the button below your account will get deactivated. Your data will be erased after a month.
+ Activate WOKA account
+ Would you like to re-activate your account?
\ No newline at end of file