From 6fd70c61646c7ff65636e39c9877a56d704c99c1 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sat, 11 Jun 2022 10:31:18 +0200
Subject: [PATCH] Make spaces back navigation a setting, disabled by default

Adds back support for those also in viewPager navigation mode, but still
don't build the stack when swiping.

Change-Id: Ib800eab558875e74b590967e7c5432a909bac60a
---
 .../java/im/vector/app/features/home/HomeDetailFragment.kt  | 3 +--
 .../im/vector/app/features/settings/VectorPreferences.kt    | 5 +++++
 vector/src/main/res/values/strings_sc.xml                   | 3 +++
 vector/src/main/res/xml/vector_settings_preferences.xml     | 6 ++++++
 4 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
index 7d6272cf68..2e17865ccd 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
@@ -23,7 +23,6 @@ import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
 import android.view.ViewTreeObserver
-import android.widget.Toast
 import androidx.core.view.isVisible
 import androidx.fragment.app.Fragment
 import androidx.viewpager2.adapter.FragmentStateAdapter
@@ -828,7 +827,7 @@ class HomeDetailFragment @Inject constructor(
         return this
     }
 
-    override fun onBackPressed(toolbarButton: Boolean) = if (!pagerPagingEnabled && getCurrentSpace() != null) {
+    override fun onBackPressed(toolbarButton: Boolean) = if (vectorPreferences.spaceBackNavigation() && getCurrentSpace() != null) {
         navigateBack()
         true
     } else {
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
index 044dafebfa..2e07347aac 100755
--- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
@@ -225,6 +225,7 @@ class VectorPreferences @Inject constructor(
         private const val SETTINGS_READ_RECEIPT_FOLLOWS_READ_MARKER = "SETTINGS_READ_RECEIPT_FOLLOWS_READ_MARKER"
         private const val SETTINGS_SHOW_OPEN_ANONYMOUS = "SETTINGS_SHOW_OPEN_ANONYMOUS"
         private const val SETTINGS_FLOATING_DATE = "SETTINGS_FLOATING_DATE"
+        private const val SETTINGS_SPACE_BACK_NAVIGATION = "SETTINGS_SPACE_BACK_NAVIGATION"
 
         private const val DID_ASK_TO_ENABLE_SESSION_PUSH = "DID_ASK_TO_ENABLE_SESSION_PUSH"
 
@@ -1168,6 +1169,10 @@ class VectorPreferences @Inject constructor(
         return defaultPrefs.getBoolean(SETTINGS_FLOATING_DATE, true)
     }
 
+    fun spaceBackNavigation(): Boolean {
+        return defaultPrefs.getBoolean(SETTINGS_SPACE_BACK_NAVIGATION, false)
+    }
+
     /**
      * I likely do more fresh installs of the app than anyone else, so a shortcut to change some of the default settings to
      * my preferred values can safe me some time
diff --git a/vector/src/main/res/values/strings_sc.xml b/vector/src/main/res/values/strings_sc.xml
index 737388277d..d75d18adec 100644
--- a/vector/src/main/res/values/strings_sc.xml
+++ b/vector/src/main/res/values/strings_sc.xml
@@ -205,4 +205,7 @@
     <string name="dev_tools_menu_display_name_changes">Account events</string>
     <string name="dev_tools_menu_redacted">Deleted messages</string>
 
+    <string name="settings_space_back_navigation">Spaces back stack</string>
+    <string name="settings_space_back_navigation_summary">Press back to show the previously selected space</string>
+
 </resources>
diff --git a/vector/src/main/res/xml/vector_settings_preferences.xml b/vector/src/main/res/xml/vector_settings_preferences.xml
index 88e7bc2776..18fac8ae74 100644
--- a/vector/src/main/res/xml/vector_settings_preferences.xml
+++ b/vector/src/main/res/xml/vector_settings_preferences.xml
@@ -135,6 +135,12 @@
             android:title="@string/settings_include_space_members_as_rooms"
             android:summary="@string/settings_include_space_members_as_rooms_summary" />
 
+        <im.vector.app.core.preference.VectorSwitchPreference
+            android:defaultValue="false"
+            android:key="SETTINGS_SPACE_BACK_NAVIGATION"
+            android:title="@string/settings_space_back_navigation"
+            android:summary="@string/settings_space_back_navigation_summary" />
+
     </im.vector.app.core.preference.VectorPreferenceCategory>
 
     <im.vector.app.core.preference.VectorPreferenceCategory android:title="@string/settings_category_composer">