From fe63647716308b43a93731c0f6625803d07d36ec Mon Sep 17 00:00:00 2001
From: Taras <tarassmakula@gmail.com>
Date: Fri, 2 Sep 2022 19:04:35 +0300
Subject: [PATCH] Add Element logout restart hack

---
 app/src/main/java/org/futo/circles/MainActivity.kt  | 13 ++++++++++++-
 .../circles/feature/settings/SettingsFragment.kt    |  4 ++--
 .../futo/circles/provider/MatrixSessionProvider.kt  |  4 ++++
 .../main/res/navigation/nav_graph_start_host.xml    | 10 +---------
 4 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/app/src/main/java/org/futo/circles/MainActivity.kt b/app/src/main/java/org/futo/circles/MainActivity.kt
index 4e0ffb5b1..414eb7ee8 100644
--- a/app/src/main/java/org/futo/circles/MainActivity.kt
+++ b/app/src/main/java/org/futo/circles/MainActivity.kt
@@ -1,6 +1,17 @@
 package org.futo.circles
 
+import android.content.Intent
 import org.futo.circles.core.BaseActivity
+import org.futo.circles.provider.MatrixSessionProvider
 
 
-class MainActivity : BaseActivity(R.layout.activity_main)
\ No newline at end of file
+class MainActivity : BaseActivity(R.layout.activity_main) {
+
+    // Special action to clear cache and/or clear credentials (Element workaround to clear database)
+    fun restartForLogout() {
+        MatrixSessionProvider.clearSession()
+        val intent = Intent(this, MainActivity::class.java)
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
+        this.startActivity(intent)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/futo/circles/feature/settings/SettingsFragment.kt b/app/src/main/java/org/futo/circles/feature/settings/SettingsFragment.kt
index baf1404aa..531b837b7 100644
--- a/app/src/main/java/org/futo/circles/feature/settings/SettingsFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/settings/SettingsFragment.kt
@@ -8,11 +8,11 @@ import androidx.fragment.app.Fragment
 import androidx.navigation.fragment.findNavController
 import by.kirich1409.viewbindingdelegate.viewBinding
 import com.amulyakhare.textdrawable.TextDrawable
+import org.futo.circles.MainActivity
 import org.futo.circles.R
 import org.futo.circles.core.matrix.pass_phrase.LoadingDialog
 import org.futo.circles.databinding.FragmentSettingsBinding
 import org.futo.circles.extensions.*
-import org.futo.circles.feature.bottom_navigation.BottomNavigationFragmentDirections
 import org.futo.circles.feature.bottom_navigation.SystemNoticesCountSharedViewModel
 import org.futo.circles.feature.settings.confirm_auth.ConfirmAuthDialog
 import org.koin.androidx.viewmodel.ext.android.sharedViewModel
@@ -78,7 +78,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
     }
 
     private fun navigateToLogin() {
-        findParentNavController()?.navigate(BottomNavigationFragmentDirections.toLogInFragment())
+        (activity as? MainActivity)?.restartForLogout()
     }
 
     private fun navigateToActiveSessions() {
diff --git a/app/src/main/java/org/futo/circles/provider/MatrixSessionProvider.kt b/app/src/main/java/org/futo/circles/provider/MatrixSessionProvider.kt
index a2904882a..9ec30ad9d 100644
--- a/app/src/main/java/org/futo/circles/provider/MatrixSessionProvider.kt
+++ b/app/src/main/java/org/futo/circles/provider/MatrixSessionProvider.kt
@@ -28,6 +28,10 @@ object MatrixSessionProvider {
         lastSession?.let { startSession(it) }
     }
 
+    fun clearSession() {
+        currentSession = null
+    }
+
     private fun startSession(session: Session, listener: Session.Listener? = null) {
         listener?.let { session.addListener(it) }
         currentSession = session.apply { open(); syncService().startSync(true) }
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 5949da062..e26c97588 100644
--- a/app/src/main/res/navigation/nav_graph_start_host.xml
+++ b/app/src/main/res/navigation/nav_graph_start_host.xml
@@ -52,15 +52,7 @@
         android:id="@+id/bottomNavigationFragment"
         android:name="org.futo.circles.feature.bottom_navigation.BottomNavigationFragment"
         android:label="Bottom Navigation"
-        tools:layout="@layout/fragment_bottom_navigation">
-
-        <action
-            android:id="@+id/to_logInFragment"
-            app:destination="@id/logInFragment"
-            app:popUpTo="@id/bottomNavigationFragment"
-            app:popUpToInclusive="true" />
-
-    </fragment>
+        tools:layout="@layout/fragment_bottom_navigation"/>
     <fragment
         android:id="@+id/setupProfileFragment"
         android:name="org.futo.circles.feature.sign_up.setup_profile.SetupProfileFragment"
-- 
GitLab