Fix destination reset after configuration change

Also enable predictive back gesture for Gallery App.

Bug: 244122804
Test: Manual with Gallery App
Change-Id: I68bb694c87b2614aa908f1e973aea8fa7288f47c
diff --git a/packages/SettingsLib/Spa/gallery/AndroidManifest.xml b/packages/SettingsLib/Spa/gallery/AndroidManifest.xml
index e5bf8ca..e34fedd 100644
--- a/packages/SettingsLib/Spa/gallery/AndroidManifest.xml
+++ b/packages/SettingsLib/Spa/gallery/AndroidManifest.xml
@@ -20,7 +20,8 @@
     <application
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_label"
-        android:supportsRtl="true">
+        android:supportsRtl="true"
+        android:enableOnBackInvokedCallback="true">
         <activity
             android:name=".MainActivity"
             android:exported="true">
diff --git a/packages/SettingsLib/Spa/spa/build.gradle b/packages/SettingsLib/Spa/spa/build.gradle
index 104966d..418d6cb 100644
--- a/packages/SettingsLib/Spa/spa/build.gradle
+++ b/packages/SettingsLib/Spa/spa/build.gradle
@@ -59,6 +59,7 @@
 }
 
 dependencies {
+    api "androidx.appcompat:appcompat:1.6.0-rc01"
     api "androidx.compose.material3:material3:$jetpack_compose_material3_version"
     api "androidx.compose.material:material-icons-extended:$jetpack_compose_version"
     api "androidx.compose.runtime:runtime-livedata:$jetpack_compose_version"
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
index ae15da6..e5a1862 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
@@ -22,7 +22,10 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.navigation.NavGraph.Companion.findStartDestination
+import androidx.navigation.NavHostController
 import androidx.navigation.compose.NavHost
 import androidx.navigation.compose.composable
 import androidx.navigation.compose.rememberNavController
@@ -50,9 +53,6 @@
 
     @Composable
     private fun MainContent() {
-        val destination =
-            intent?.getStringExtra(KEY_DESTINATION) ?: sppRepository.getDefaultStartPageName()
-
         val navController = rememberNavController()
         CompositionLocalProvider(navController.localNavController()) {
             NavHost(navController, ROOT_PAGE_NAME) {
@@ -70,13 +70,23 @@
                     }
                 }
             }
+        }
 
+        InitialDestinationNavigator(navController)
+    }
+
+    @Composable
+    private fun InitialDestinationNavigator(navController: NavHostController) {
+        val destinationNavigated = rememberSaveable { mutableStateOf(false) }
+        if (destinationNavigated.value) return
+        destinationNavigated.value = true
+        LaunchedEffect(Unit) {
+            val destination =
+                intent?.getStringExtra(KEY_DESTINATION) ?: sppRepository.getDefaultStartPageName()
             if (destination.isNotEmpty()) {
-                LaunchedEffect(Unit) {
-                    navController.navigate(destination) {
-                        popUpTo(navController.graph.findStartDestination().id) {
-                            inclusive = true
-                        }
+                navController.navigate(destination) {
+                    popUpTo(navController.graph.findStartDestination().id) {
+                        inclusive = true
                     }
                 }
             }