From a08069cb32b4aaefffa37234928d1f00c40f32b0 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Tue, 30 May 2023 15:35:34 +0300
Subject: [PATCH] Integrate auth navigation

---
 .../res/navigation/nav_graph_start_host.xml   | 60 +-----------------
 .../res/navigation/settings_nav_graph.xml     |  2 +-
 .../futo/circles/auth/base/AuthNavigator.kt   | 39 ------------
 .../auth/feature/log_in/LogInFragment.kt      |  7 +--
 .../log_in/stages/LogInStagesFragment.kt      |  5 +-
 .../auth/feature/sign_up/SignUpFragment.kt    |  3 +-
 .../setup_profile/SetupProfileFragment.kt     |  3 +-
 .../main/res/navigation/nav_graph_auth.xml    | 63 +++++++++++++++++++
 auth/src/main/res/values/ids.xml              |  5 ++
 auth/src/main/res/values/strings.xml          |  6 --
 10 files changed, 79 insertions(+), 114 deletions(-)
 delete mode 100644 auth/src/main/java/org/futo/circles/auth/base/AuthNavigator.kt
 create mode 100644 auth/src/main/res/navigation/nav_graph_auth.xml
 create mode 100644 auth/src/main/res/values/ids.xml

diff --git a/app/src/main/res/navigation/nav_graph_start_host.xml b/app/src/main/res/navigation/nav_graph_start_host.xml
index eee0ed259..282cd78b5 100644
--- a/app/src/main/res/navigation/nav_graph_start_host.xml
+++ b/app/src/main/res/navigation/nav_graph_start_host.xml
@@ -13,7 +13,7 @@
 
         <action
             android:id="@+id/to_logInFragment"
-            app:destination="@id/logInFragment"
+            app:destination="@id/nav_graph_auth"
             app:popUpTo="@id/splashFragment"
             app:popUpToInclusive="true" />
         <action
@@ -23,51 +23,11 @@
             app:popUpToInclusive="true" />
     </fragment>
 
-    <fragment
-        android:id="@+id/logInFragment"
-        android:name="org.futo.circles.feature.log_in.LogInFragment"
-        android:label="Log In"
-        tools:layout="@layout/fragment_log_in">
-        <action
-            android:id="@+id/to_signUpFragment"
-            app:destination="@id/signUpFragment" />
-        <action
-            android:id="@+id/to_loginStagesFragment"
-            app:destination="@id/loginStagesFragment" />
-        <action
-            android:id="@+id/to_bottomNavigationFragment"
-            app:destination="@id/bottomNavigationFragment"
-            app:popUpTo="@id/logInFragment"
-            app:popUpToInclusive="true" />
-    </fragment>
-
-    <fragment
-        android:id="@+id/signUpFragment"
-        android:name="org.futo.circles.feature.sign_up.SignUpFragment"
-        android:label="Sign up"
-        tools:layout="@layout/fragment_sign_up">
-        <action
-            android:id="@+id/to_setupProfileFragment"
-            app:destination="@id/setupProfileFragment"
-            app:popUpTo="@id/logInFragment"
-            app:popUpToInclusive="true" />
-    </fragment>
-
     <fragment
         android:id="@+id/bottomNavigationFragment"
         android:name="org.futo.circles.feature.home.HomeFragment"
         tools:layout="@layout/fragment_bottom_navigation" />
-    <fragment
-        android:id="@+id/setupProfileFragment"
-        android:name="org.futo.circles.feature.sign_up.setup_profile.SetupProfileFragment"
-        android:label="SetupProfileFragment"
-        tools:layout="@layout/fragment_setup_profile">
-        <action
-            android:id="@+id/to_setupCirclesFragment"
-            app:destination="@id/setupCirclesFragment"
-            app:popUpTo="@id/setupProfileFragment"
-            app:popUpToInclusive="true" />
-    </fragment>
+
     <fragment
         android:id="@+id/setupCirclesFragment"
         android:name="org.futo.circles.feature.circles.setup.SetupCirclesFragment"
@@ -79,21 +39,7 @@
             app:popUpTo="@id/setupCirclesFragment"
             app:popUpToInclusive="true" />
     </fragment>
-    <fragment
-        android:id="@+id/loginStagesFragment"
-        android:name="org.futo.circles.feature.log_in.stages.LogInStagesFragment"
-        tools:layout="@layout/fragment_login_stages">
 
-        <action
-            android:id="@+id/to_bottomNavigationFragment"
-            app:destination="@id/bottomNavigationFragment"
-            app:popUpTo="@id/logInFragment"
-            app:popUpToInclusive="true" />
-        <action
-            android:id="@+id/to_setupCirclesFragment"
-            app:destination="@id/setupCirclesFragment"
-            app:popUpTo="@id/logInFragment"
-            app:popUpToInclusive="true" />
-    </fragment>
+    <include app:graph="@navigation/nav_graph_auth" />
 
 </navigation>
\ No newline at end of file
diff --git a/app/src/main/res/navigation/settings_nav_graph.xml b/app/src/main/res/navigation/settings_nav_graph.xml
index f14bb8a3d..96794251c 100644
--- a/app/src/main/res/navigation/settings_nav_graph.xml
+++ b/app/src/main/res/navigation/settings_nav_graph.xml
@@ -110,7 +110,7 @@
 
     <dialog
         android:id="@+id/reAuthStagesDialogFragment"
-        android:name="org.futo.circles.feature.reauth.ReAuthStagesDialogFragment"
+        android:name="org.futo.circles.auth.feature.reauth.ReAuthStagesDialogFragment"
         tools:layout="@layout/fragment_login_stages" />
 
     <dialog
diff --git a/auth/src/main/java/org/futo/circles/auth/base/AuthNavigator.kt b/auth/src/main/java/org/futo/circles/auth/base/AuthNavigator.kt
deleted file mode 100644
index c459fe01a..000000000
--- a/auth/src/main/java/org/futo/circles/auth/base/AuthNavigator.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.futo.circles.auth.base
-
-import android.content.Context
-import androidx.core.net.toUri
-import androidx.navigation.NavController
-import androidx.navigation.NavDeepLinkRequest
-import org.futo.circles.auth.R
-import org.futo.circles.core.CirclesAppConfig
-
-object AuthNavigator {
-
-    fun navigateToBottomMenu(context: Context, navController: NavController) {
-        navController.navigateWithUri(context, R.string.navigate_to_bottom_menu_uri)
-    }
-
-    fun navigateToSetupCircles(context: Context, navController: NavController) {
-        navController.navigateWithUri(context, R.string.navigate_to_setup_circles_uri)
-    }
-
-    fun navigateToLoginStages(context: Context, navController: NavController) {
-        navController.navigateWithUri(context, R.string.navigate_to_login_stages_uri)
-    }
-
-    fun navigateToSignUp(context: Context, navController: NavController) {
-        navController.navigateWithUri(context, R.string.navigate_to_signup_uri)
-    }
-
-    fun navigateToSetupProfile(context: Context, navController: NavController) {
-        navController.navigateWithUri(context, R.string.navigate_to_setup_profile_uri)
-    }
-
-
-    private fun NavController.navigateWithUri(context: Context, uriResId: Int) {
-        val request = NavDeepLinkRequest.Builder
-            .fromUri(context.getString(uriResId, CirclesAppConfig.appId).toUri())
-            .build()
-        navigate(request)
-    }
-}
\ No newline at end of file
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/log_in/LogInFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/log_in/LogInFragment.kt
index 6f1960e1a..7c60d2cae 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/log_in/LogInFragment.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/log_in/LogInFragment.kt
@@ -8,7 +8,6 @@ import androidx.fragment.app.Fragment
 import androidx.navigation.fragment.findNavController
 import by.kirich1409.viewbindingdelegate.viewBinding
 import org.futo.circles.auth.R
-import org.futo.circles.auth.base.AuthNavigator
 import org.futo.circles.auth.databinding.FragmentLogInBinding
 import org.futo.circles.auth.feature.log_in.switch_user.list.SwitchUsersAdapter
 import org.futo.circles.auth.feature.log_in.switch_user.list.SwitchUsersViewHolder
@@ -84,7 +83,7 @@ class LogInFragment : Fragment(R.layout.fragment_log_in), HasLoadingState {
     private fun setupObservers() {
         viewModel.loginResultLiveData.observeResponse(this,
             success = {
-                AuthNavigator.navigateToLoginStages(requireContext(), findNavController())
+                findNavController().navigate(LogInFragmentDirections.toLoginStagesFragment())
             }
         )
         viewModel.switchUsersLiveData.observeData(this) {
@@ -92,14 +91,14 @@ class LogInFragment : Fragment(R.layout.fragment_log_in), HasLoadingState {
             switchUsersAdapter.submitList(it)
         }
         viewModel.navigateToBottomMenuScreenLiveData.observeData(this) {
-            AuthNavigator.navigateToBottomMenu(requireContext(), findNavController())
+            findNavController().navigate(LogInFragmentDirections.toBottomNavigationFragment())
         }
     }
 
     private fun setOnClickActions() {
         with(binding) {
             btnSignUp.setOnClickListener {
-                AuthNavigator.navigateToSignUp(requireContext(), findNavController())
+                findNavController().navigate(LogInFragmentDirections.toSignUpFragment())
             }
             btnLogin.setOnClickListener {
                 val userName = binding.tilUserName.getText()
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/log_in/stages/LogInStagesFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/log_in/stages/LogInStagesFragment.kt
index 0ba11d75a..215409c72 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/log_in/stages/LogInStagesFragment.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/log_in/stages/LogInStagesFragment.kt
@@ -11,7 +11,6 @@ import androidx.navigation.fragment.NavHostFragment
 import androidx.navigation.fragment.findNavController
 import by.kirich1409.viewbindingdelegate.viewBinding
 import org.futo.circles.auth.R
-import org.futo.circles.auth.base.AuthNavigator
 import org.futo.circles.auth.base.LoginStageNavigationEvent
 import org.futo.circles.auth.databinding.FragmentLoginStagesBinding
 import org.futo.circles.auth.feature.log_in.EnterPassPhraseDialog
@@ -117,11 +116,11 @@ class LogInStagesFragment : Fragment(R.layout.fragment_login_stages),
     }
 
     private fun navigateToBottomMenuFragment() {
-        AuthNavigator.navigateToBottomMenu(requireContext(), findNavController())
+        findNavController().navigate(LogInStagesFragmentDirections.toBottomNavigationFragment())
     }
 
     private fun navigateToSetupCircles() {
-        AuthNavigator.navigateToSetupCircles(requireContext(), findNavController())
+        findNavController().navigate(LogInStagesFragmentDirections.toSetupCirclesFragment())
     }
 
     private fun showDiscardDialog() {
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpFragment.kt
index 3ff9ea9b0..491fe15c7 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpFragment.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpFragment.kt
@@ -9,7 +9,6 @@ import androidx.navigation.fragment.NavHostFragment
 import androidx.navigation.fragment.findNavController
 import by.kirich1409.viewbindingdelegate.viewBinding
 import org.futo.circles.auth.R
-import org.futo.circles.auth.base.AuthNavigator
 import org.futo.circles.auth.databinding.FragmentSignUpBinding
 import org.futo.circles.core.extensions.observeData
 import org.futo.circles.core.extensions.observeResponse
@@ -94,7 +93,7 @@ class SignUpFragment : Fragment(R.layout.fragment_sign_up),
     }
 
     private fun navigateToSetupProfile() {
-        AuthNavigator.navigateToSetupProfile(requireContext(), findNavController())
+        findNavController().navigate(SignUpFragmentDirections.toSetupProfileFragment())
     }
 
 }
\ No newline at end of file
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/setup_profile/SetupProfileFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/setup_profile/SetupProfileFragment.kt
index 22ae87233..c738886b8 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/setup_profile/SetupProfileFragment.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/setup_profile/SetupProfileFragment.kt
@@ -7,7 +7,6 @@ import androidx.fragment.app.Fragment
 import androidx.navigation.fragment.findNavController
 import by.kirich1409.viewbindingdelegate.viewBinding
 import org.futo.circles.auth.R
-import org.futo.circles.auth.base.AuthNavigator
 import org.futo.circles.auth.databinding.FragmentSetupProfileBinding
 import org.futo.circles.core.extensions.getText
 import org.futo.circles.core.extensions.observeData
@@ -63,7 +62,7 @@ class SetupProfileFragment : Fragment(R.layout.fragment_setup_profile), HasLoadi
     }
 
     private fun navigateToSetupCircles() {
-        AuthNavigator.navigateToSetupCircles(requireContext(), findNavController())
+        findNavController().navigate(SetupProfileFragmentDirections.toSetupCirclesFragment())
     }
 
     private fun setSaveButtonEnabled() {
diff --git a/auth/src/main/res/navigation/nav_graph_auth.xml b/auth/src/main/res/navigation/nav_graph_auth.xml
new file mode 100644
index 000000000..faddf293f
--- /dev/null
+++ b/auth/src/main/res/navigation/nav_graph_auth.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<navigation xmlns:android="http://schemas.android.com/apk/res/android"
+    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/logInFragment">
+
+    <fragment
+        android:id="@+id/logInFragment"
+        android:name="org.futo.circles.auth.feature.log_in.LogInFragment"
+        android:label="Log In"
+        tools:layout="@layout/fragment_log_in">
+        <action
+            android:id="@+id/to_signUpFragment"
+            app:destination="@id/signUpFragment" />
+        <action
+            android:id="@+id/to_loginStagesFragment"
+            app:destination="@id/loginStagesFragment" />
+        <action
+            android:id="@+id/to_bottomNavigationFragment"
+            app:destination="@id/bottomNavigationFragment"
+            app:popUpTo="@id/logInFragment"
+            app:popUpToInclusive="true" />
+    </fragment>
+    <fragment
+        android:id="@+id/loginStagesFragment"
+        android:name="org.futo.circles.auth.feature.log_in.stages.LogInStagesFragment"
+        tools:layout="@layout/fragment_login_stages">
+
+        <action
+            android:id="@+id/to_bottomNavigationFragment"
+            app:destination="@id/bottomNavigationFragment"
+            app:popUpTo="@id/logInFragment"
+            app:popUpToInclusive="true" />
+        <action
+            android:id="@+id/to_setupCirclesFragment"
+            app:destination="@id/setupCirclesFragment"
+            app:popUpTo="@id/logInFragment"
+            app:popUpToInclusive="true" />
+    </fragment>
+    <fragment
+        android:id="@+id/signUpFragment"
+        android:name="org.futo.circles.auth.feature.sign_up.SignUpFragment"
+        android:label="Sign up"
+        tools:layout="@layout/fragment_sign_up">
+        <action
+            android:id="@+id/to_setupProfileFragment"
+            app:destination="@id/setupProfileFragment"
+            app:popUpTo="@id/logInFragment"
+            app:popUpToInclusive="true" />
+    </fragment>
+    <fragment
+        android:id="@+id/setupProfileFragment"
+        android:name="org.futo.circles.auth.feature.sign_up.setup_profile.SetupProfileFragment"
+        android:label="SetupProfileFragment"
+        tools:layout="@layout/fragment_setup_profile">
+        <action
+            android:id="@+id/to_setupCirclesFragment"
+            app:destination="@id/setupCirclesFragment"
+            app:popUpTo="@id/setupProfileFragment"
+            app:popUpToInclusive="true" />
+    </fragment>
+</navigation>
diff --git a/auth/src/main/res/values/ids.xml b/auth/src/main/res/values/ids.xml
new file mode 100644
index 000000000..e37603209
--- /dev/null
+++ b/auth/src/main/res/values/ids.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <item name="bottomNavigationFragment" type="id" />
+    <item name="setupCirclesFragment" type="id" />
+</resources>
\ No newline at end of file
diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml
index 66569cf8a..f01798cf8 100644
--- a/auth/src/main/res/values/strings.xml
+++ b/auth/src/main/res/values/strings.xml
@@ -95,12 +95,6 @@
     <string name="remove">Remove</string>
     <string name="not_supported_navigation_event">Not supported navigation event</string>
 
-    <string name="navigate_to_bottom_menu_uri" translatable="false">android-app://%1$s/bottomNavigationFragment</string>
-    <string name="navigate_to_setup_profile_uri" translatable="false">android-app://%1$s/setupProfileFragment</string>
-    <string name="navigate_to_setup_circles_uri" translatable="false">android-app://%1$s/setupCirclesFragment</string>
-    <string name="navigate_to_login_stages_uri" translatable="false">android-app://%1$s/loginStagesFragment</string>
-    <string name="navigate_to_signup_uri" translatable="false">android-app://%1$s/signUpFragment</string>
-
 
     <plurals name="days">
         <item quantity="one">%1$d day</item>
-- 
GitLab