Преглед изворни кода

add navigation for RegisterFragment

MrOzOn пре 5 година
родитељ
комит
30450b36e4

+ 6 - 0
app/src/main/java/com/mrozon/healthdiary/di/NavigationModule.kt

@@ -6,10 +6,12 @@ import androidx.navigation.fragment.findNavController
 import com.mrozon.core_api.db.HealthDiaryDao
 import com.mrozon.core_api.mapper.UserToUserDbMapper
 import com.mrozon.core_api.navigation.LoginNavigator
+import com.mrozon.core_api.navigation.RegistrationNavigator
 import com.mrozon.core_api.navigation.SplashNavigator
 import com.mrozon.feature_splash.repository.LocalUser
 import com.mrozon.feature_splash.repository.LocalUserImp
 import com.mrozon.healthdiary.navigation.LoginNavigatorImpl
+import com.mrozon.healthdiary.navigation.RegistrationNavigatorImpl
 import com.mrozon.healthdiary.navigation.SplashNavigatorImpl
 import com.mrozon.utils.base.BaseFragment
 import dagger.Binds
@@ -28,4 +30,8 @@ interface NavigationModule {
     @Reusable
     @Binds
     fun loginNavigator(navigator: LoginNavigatorImpl): LoginNavigator
+
+    @Reusable
+    @Binds
+    fun registrationNavigator(navigator: RegistrationNavigatorImpl): RegistrationNavigator
 }

+ 16 - 0
app/src/main/java/com/mrozon/healthdiary/navigation/RegistrationNavigatorImpl.kt

@@ -0,0 +1,16 @@
+package com.mrozon.healthdiary.navigation
+
+import androidx.core.os.bundleOf
+import androidx.navigation.NavController
+import com.mrozon.core_api.navigation.RegistrationNavigator
+import com.mrozon.healthdiary.R
+import javax.inject.Inject
+
+class RegistrationNavigatorImpl @Inject constructor()
+    :RegistrationNavigator{
+
+    override fun navigateToLoginUser(navController: NavController, userName: String) {
+        val bundle = bundleOf("userName" to userName)
+        navController.navigate(R.id.action_registrationFragment_to_loginFragment, bundle)
+    }
+}

+ 1 - 0
core_api/src/main/java/com/mrozon/core_api/navigation/NavigatorProvider.kt

@@ -3,4 +3,5 @@ package com.mrozon.core_api.navigation
 interface NavigatorProvider {
     fun provideSplashNavigator(): SplashNavigator
     fun provideLoginNavigator(): LoginNavigator
+    fun provideRegistrationNavigator(): RegistrationNavigator
 }

+ 7 - 0
core_api/src/main/java/com/mrozon/core_api/navigation/RegistrationNavigator.kt

@@ -0,0 +1,7 @@
+package com.mrozon.core_api.navigation
+
+import androidx.navigation.NavController
+
+interface RegistrationNavigator {
+    fun navigateToLoginUser(navController: NavController, userName: String="")
+}

+ 2 - 0
feature_auth/src/main/java/com/mrozon/feature_auth/di/LoginFragmentComponent.kt

@@ -5,7 +5,9 @@ import com.mrozon.core_api.providers.AppWithFacade
 import com.mrozon.core_api.providers.ProvidersFacade
 import com.mrozon.core_api.viewmodel.ViewModelsFactoryProvider
 import com.mrozon.feature_auth.presentation.LoginFragment
+import dagger.BindsInstance
 import dagger.Component
+import dagger.Subcomponent
 import javax.inject.Singleton
 
 @Singleton

+ 3 - 0
feature_auth/src/main/java/com/mrozon/feature_auth/presentation/LoginFragment.kt

@@ -14,6 +14,7 @@ import androidx.fragment.app.viewModels
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.fragment.findNavController
+import androidx.navigation.fragment.navArgs
 import com.mrozon.core_api.navigation.LoginNavigator
 import com.mrozon.core_api.navigation.SplashNavigator
 import com.mrozon.feature_auth.R
@@ -50,6 +51,8 @@ class LoginFragment : BaseFragment<FragmentLoginBinding>() {
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
+        binding?.etUserName?.setText(arguments?.getString("userName"))
+
         binding?.etUserName?.offer(viewModel.userNameChannel)
         binding?.etUserPassword?.offer(viewModel.userPasswordChannel)
 

+ 13 - 2
feature_auth/src/main/java/com/mrozon/feature_auth/presentation/RegistrationFragment.kt

@@ -6,6 +6,9 @@ import android.view.View
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import com.mrozon.core_api.navigation.LoginNavigator
+import com.mrozon.core_api.navigation.RegistrationNavigator
 import com.mrozon.feature_auth.R
 import com.mrozon.feature_auth.databinding.FragmentRegistrationBinding
 import com.mrozon.feature_auth.di.LoginFragmentComponent
@@ -26,6 +29,9 @@ class RegistrationFragment: BaseFragment<FragmentRegistrationBinding>() {
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
+    @Inject
+    lateinit var navigator: RegistrationNavigator
+
     private val viewModel by viewModels<RegistrationFragmentViewModel> { viewModelFactory }
 
     override fun onAttach(context: Context) {
@@ -47,6 +53,11 @@ class RegistrationFragment: BaseFragment<FragmentRegistrationBinding>() {
             hideKeyboard()
             viewModel.registerUser()
         }
+
+        binding?.btnRegistrationCancel?.setOnClickListener {
+            hideKeyboard()
+            navigator.navigateToLoginUser(findNavController())
+        }
     }
 
     @ExperimentalCoroutinesApi
@@ -66,9 +77,9 @@ class RegistrationFragment: BaseFragment<FragmentRegistrationBinding>() {
         })
 
         viewModel.registered.observe(viewLifecycleOwner, Observer { registeredUser ->
-            if(registeredUser) {
+            if(registeredUser!=null) {
                 showInfo(getString(R.string.userRegistered)) {
-
+                    navigator.navigateToLoginUser(findNavController(), registeredUser)
                 }
             }
         })

+ 3 - 3
feature_auth/src/main/java/com/mrozon/feature_auth/presentation/RegistrationFragmentViewModel.kt

@@ -34,8 +34,8 @@ class RegistrationFragmentViewModel @Inject constructor(
     val error: LiveData<String?>
         get() = _error
 
-    private val _registered = MutableLiveData<Boolean>(false)
-    val registered: LiveData<Boolean>
+    private val _registered = MutableLiveData<String?>()
+    val registered: LiveData<String?>
         get() = _registered
 
     @ExperimentalCoroutinesApi
@@ -110,7 +110,7 @@ class RegistrationFragmentViewModel @Inject constructor(
             if (response.status == com.mrozon.utils.network.Result.Status.SUCCESS) {
                 withContext(Dispatchers.Main) {
                     _progress.value = false
-                    _registered.value = true
+                    _registered.value = response.data?.username
                 }
             } else if (response.status == com.mrozon.utils.network.Result.Status.ERROR) {
                 Timber.e(response.message!!)