Skip to content

Commit ae201ff

Browse files
Properly init in-memory usage when restoring the state (#610)
* Save useToken between config changes * Move the DisposalEffect to set in-memory state to a higher up composable When restoring the state after the activity got killed, the NavController would immidiately launch the previous destination even before running the DisposableEffect. Moving the effect up fixes this timing issue.
1 parent 1726f81 commit ae201ff

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

demo-app/src/main/java/com/gravatar/demoapp/ui/AvatarUpdateTab.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ import kotlinx.coroutines.withContext
7777
fun AvatarUpdateTab(modifier: Modifier = Modifier) {
7878
var userEmail by remember { mutableStateOf(BuildConfig.DEMO_EMAIL) }
7979
var userToken by remember { mutableStateOf(BuildConfig.DEMO_BEARER_TOKEN) }
80-
var useToken by remember { mutableStateOf(false) }
80+
var useToken by rememberSaveable { mutableStateOf(false) }
8181
var tokenVisible by remember { mutableStateOf(false) }
8282
val context = LocalContext.current
8383
var showBottomSheet by rememberSaveable { mutableStateOf(false) }

gravatar-quickeditor/src/main/java/com/gravatar/quickeditor/ui/editor/GravatarQuickEditorPage.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import androidx.compose.animation.expandVertically
77
import androidx.compose.animation.fadeIn
88
import androidx.compose.animation.shrinkVertically
99
import androidx.compose.runtime.Composable
10-
import androidx.compose.runtime.DisposableEffect
1110
import androidx.navigation.NavGraphBuilder
1211
import androidx.navigation.NavHostController
1312
import androidx.navigation.NavType
@@ -16,7 +15,6 @@ import androidx.navigation.compose.composable
1615
import androidx.navigation.compose.navigation
1716
import androidx.navigation.compose.rememberNavController
1817
import androidx.navigation.navArgument
19-
import com.gravatar.quickeditor.QuickEditorContainer
2018
import com.gravatar.quickeditor.ui.alttext.AltTextPage
2119
import com.gravatar.quickeditor.ui.avatarpicker.AvatarPicker
2220
import com.gravatar.quickeditor.ui.navigation.EditorNavDestinations
@@ -111,14 +109,6 @@ internal fun GravatarQuickEditorPage(
111109
) {
112110
val navController = rememberNavController()
113111

114-
DisposableEffect(authToken) {
115-
QuickEditorContainer.getInstance().useInMemoryTokenStorage()
116-
117-
onDispose {
118-
QuickEditorContainer.getInstance().resetUseInMemoryTokenStorage()
119-
}
120-
}
121-
122112
NavHost(
123113
navController,
124114
startDestination = QuickEditorPage.SPLASH.name,

gravatar-quickeditor/src/main/java/com/gravatar/quickeditor/ui/editor/bottomsheet/GravatarQuickEditorBottomSheet.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
2323
import androidx.compose.material3.surfaceColorAtElevation
2424
import androidx.compose.runtime.Composable
2525
import androidx.compose.runtime.CompositionLocalProvider
26+
import androidx.compose.runtime.DisposableEffect
2627
import androidx.compose.runtime.LaunchedEffect
2728
import androidx.compose.runtime.rememberCoroutineScope
2829
import androidx.compose.ui.Alignment
@@ -42,6 +43,7 @@ import com.composables.core.SheetDetent
4243
import com.composables.core.SheetDetent.Companion.FullyExpanded
4344
import com.composables.core.SheetDetent.Companion.Hidden
4445
import com.composables.core.rememberModalBottomSheetState
46+
import com.gravatar.quickeditor.QuickEditorContainer
4547
import com.gravatar.quickeditor.ui.components.QEDragHandle
4648
import com.gravatar.quickeditor.ui.editor.AuthenticationMethod
4749
import com.gravatar.quickeditor.ui.editor.AvatarPickerContentLayout
@@ -100,6 +102,16 @@ internal fun GravatarQuickEditorBottomSheet(
100102
}
101103
}
102104

105+
DisposableEffect(Unit) {
106+
if (authenticationMethod is AuthenticationMethod.Bearer) {
107+
QuickEditorContainer.getInstance().useInMemoryTokenStorage()
108+
}
109+
110+
onDispose {
111+
QuickEditorContainer.getInstance().resetUseInMemoryTokenStorage()
112+
}
113+
}
114+
103115
CompositionLocalProvider(LocalGravatarTheme provides mainGravatarTheme) {
104116
GravatarModalBottomSheet(
105117
onDismiss = onDismiss,

0 commit comments

Comments
 (0)