Persist stored vertical insets between activity restarts.

This commit is contained in:
Alex Hart
2025-10-22 12:54:26 -03:00
committed by Greyson Parrelli
parent 12cb74bc05
commit e4fd7a6aee
3 changed files with 13 additions and 5 deletions

View File

@@ -64,7 +64,9 @@ fun rememberMainNavigationDetailLocation(
onWillFocusPrimary: suspend () -> Unit = {}
): State<MainNavigationDetailLocation> {
val state = rememberSaveable(
stateSaver = MainNavigationDetailLocation.Saver()
stateSaver = MainNavigationDetailLocation.Saver(
mainNavigationViewModel.earlyNavigationDetailLocationRequested
)
) {
mutableStateOf(mainNavigationViewModel.earlyNavigationDetailLocationRequested ?: MainNavigationDetailLocation.Empty)
}

View File

@@ -24,13 +24,15 @@ import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId
@Parcelize
sealed class MainNavigationDetailLocation : Parcelable {
class Saver : androidx.compose.runtime.saveable.Saver<MainNavigationDetailLocation, String> {
class Saver(
val earlyLocation: MainNavigationDetailLocation?
) : androidx.compose.runtime.saveable.Saver<MainNavigationDetailLocation, String> {
override fun SaverScope.save(value: MainNavigationDetailLocation): String? {
return Json.encodeToString(value)
}
override fun restore(value: String): MainNavigationDetailLocation? {
return Json.decodeFromString(value)
return earlyLocation ?: Json.decodeFromString(value)
}
}

View File

@@ -5,6 +5,7 @@
package org.thoughtcrime.securesms.main
import android.os.Parcelable
import androidx.annotation.Px
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
@@ -15,14 +16,17 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Density
import kotlinx.parcelize.Parcelize
import org.thoughtcrime.securesms.window.WindowSizeClass
@Parcelize
data class VerticalInsets(
@param:Px val statusBar: Float,
@param:Px val navBar: Float
) {
) : Parcelable {
companion object {
val Zero = VerticalInsets(0f, 0f)
}
@@ -39,7 +43,7 @@ fun rememberVerticalInsets(): State<VerticalInsets> {
val windowSizeClass = WindowSizeClass.rememberWindowSizeClass()
val insets = remember { mutableStateOf(VerticalInsets.Zero) }
val insets = rememberSaveable { mutableStateOf(VerticalInsets.Zero) }
val updated = remember(statusBarInsets, navigationBarInsets, windowSizeClass) {
insets.value = if (windowSizeClass.isSplitPane()) {
VerticalInsets.Zero