From b455dbe095e86225aa6cbeea79872d0fc44d369d Mon Sep 17 00:00:00 2001
From: Taras <tarassmakula@gmail.com>
Date: Sat, 12 Mar 2022 13:52:30 +0200
Subject: [PATCH] Create empty splash fragment to solve start destination

---
 .../java/com/futo/circles/MainActivity.kt     | 29 +------------------
 .../circles/feature/splash/SplashFragment.kt  | 20 +++++++++++++
 app/src/main/res/layout/main_activity.xml     | 17 ++++-------
 app/src/main/res/layout/splash_fragment.xml   |  6 ++++
 .../res/navigation/nav_graph_start_host.xml   | 20 ++++++++++++-
 5 files changed, 51 insertions(+), 41 deletions(-)
 create mode 100644 app/src/main/java/com/futo/circles/feature/splash/SplashFragment.kt
 create mode 100644 app/src/main/res/layout/splash_fragment.xml

diff --git a/app/src/main/java/com/futo/circles/MainActivity.kt b/app/src/main/java/com/futo/circles/MainActivity.kt
index fa17ebb0c..386877454 100644
--- a/app/src/main/java/com/futo/circles/MainActivity.kt
+++ b/app/src/main/java/com/futo/circles/MainActivity.kt
@@ -1,33 +1,6 @@
 package com.futo.circles
 
-import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
-import androidx.navigation.NavController
-import androidx.navigation.NavGraph
-import androidx.navigation.fragment.NavHostFragment
-import com.futo.circles.provider.MatrixSessionProvider
 
 
-class MainActivity : AppCompatActivity(R.layout.main_activity) {
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        setInitialFragment()
-    }
-
-    private fun setInitialFragment() {
-        val navController: NavController =
-            (supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment).navController
-        val navGraph = navController.navInflater.inflate(R.navigation.nav_graph_start_host)
-        setStartDestination(navGraph)
-        navController.setGraph(navGraph, intent.extras)
-    }
-
-    private fun setStartDestination(navGraph: NavGraph) {
-        val startDestinationId = MatrixSessionProvider.currentSession?.let {
-            R.id.bottomNavigationFragment
-        } ?: R.id.logInFragment
-
-        navGraph.setStartDestination(startDestinationId)
-    }
-}
\ No newline at end of file
+class MainActivity : AppCompatActivity(R.layout.main_activity)
\ No newline at end of file
diff --git a/app/src/main/java/com/futo/circles/feature/splash/SplashFragment.kt b/app/src/main/java/com/futo/circles/feature/splash/SplashFragment.kt
new file mode 100644
index 000000000..cc0fa729f
--- /dev/null
+++ b/app/src/main/java/com/futo/circles/feature/splash/SplashFragment.kt
@@ -0,0 +1,20 @@
+package com.futo.circles.feature.splash
+
+import android.os.Bundle
+import android.view.View
+import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.findNavController
+import com.futo.circles.R
+import com.futo.circles.provider.MatrixSessionProvider
+
+class SplashFragment : Fragment(R.layout.splash_fragment) {
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        val destination = MatrixSessionProvider.currentSession?.let {
+            SplashFragmentDirections.toBottomNavigationFragment()
+        } ?: SplashFragmentDirections.toLogInFragment()
+
+        findNavController().navigate(destination)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml
index 25c44e5f4..778060440 100644
--- a/app/src/main/res/layout/main_activity.xml
+++ b/app/src/main/res/layout/main_activity.xml
@@ -1,17 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.fragment.app.FragmentContainerView 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/container"
+    android:id="@+id/nav_host_fragment"
+    android:name="androidx.navigation.fragment.NavHostFragment"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".MainActivity">
+    app:defaultNavHost="true"
+    app:navGraph="@navigation/nav_graph_start_host" />
 
-    <androidx.fragment.app.FragmentContainerView
-        android:id="@+id/nav_host_fragment"
-        android:name="androidx.navigation.fragment.NavHostFragment"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        app:defaultNavHost="true" />
-
-</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/splash_fragment.xml b/app/src/main/res/layout/splash_fragment.xml
new file mode 100644
index 000000000..77d9ef65f
--- /dev/null
+++ b/app/src/main/res/layout/splash_fragment.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
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 484d803d5..a9bbfa4f9 100644
--- a/app/src/main/res/navigation/nav_graph_start_host.xml
+++ b/app/src/main/res/navigation/nav_graph_start_host.xml
@@ -3,7 +3,25 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/nav_graph_start_host"
-    app:startDestination="@id/logInFragment">
+    app:startDestination="@id/splashFragment">
+
+    <fragment
+        android:id="@+id/splashFragment"
+        android:name="com.futo.circles.feature.splash.SplashFragment"
+        android:label="Splash"
+        tools:layout="@layout/splash_fragment">
+
+        <action
+            android:id="@+id/to_logInFragment"
+            app:destination="@id/logInFragment"
+            app:popUpTo="@id/splashFragment"
+            app:popUpToInclusive="true" />
+        <action
+            android:id="@+id/to_bottomNavigationFragment"
+            app:destination="@id/bottomNavigationFragment"
+            app:popUpTo="@id/splashFragment"
+            app:popUpToInclusive="true" />
+    </fragment>
 
     <fragment
         android:id="@+id/logInFragment"
-- 
GitLab