Always use the latest... fix.

This commit is contained in:
Benoit Marty
2024-01-23 18:13:02 +01:00
committed by Benoit Marty
parent 3ced570b3c
commit eb51b49aef
9 changed files with 49 additions and 19 deletions
@@ -18,6 +18,8 @@ package io.element.android.features.ftue.impl.migration
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.ftue.impl.R import io.element.android.features.ftue.impl.R
@@ -32,8 +34,9 @@ fun MigrationScreenView(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
if (migrationState.isMigrating.not()) { if (migrationState.isMigrating.not()) {
LaunchedEffect(onMigrationFinished) { val latestOnMigrationFinished by rememberUpdatedState(onMigrationFinished)
onMigrationFinished() LaunchedEffect(Unit) {
latestOnMigrationFinished()
} }
} }
SunsetPage( SunsetPage(
@@ -28,6 +28,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
@@ -57,8 +59,9 @@ fun InviteListView(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
if (state.acceptedAction is AsyncData.Success) { if (state.acceptedAction is AsyncData.Success) {
LaunchedEffect(state.acceptedAction, onInviteAccepted) { val latestOnInviteAccepted by rememberUpdatedState(onInviteAccepted)
onInviteAccepted(state.acceptedAction.data) LaunchedEffect(state.acceptedAction) {
latestOnInviteAccepted(state.acceptedAction.data)
} }
} }
@@ -18,6 +18,8 @@ package io.element.android.features.login.impl.changeserver
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import io.element.android.features.login.impl.dialogs.SlidingSyncNotSupportedDialog import io.element.android.features.login.impl.dialogs.SlidingSyncNotSupportedDialog
@@ -63,8 +65,11 @@ fun ChangeServerView(
} }
} }
is AsyncData.Loading -> ProgressDialog() is AsyncData.Loading -> ProgressDialog()
is AsyncData.Success -> LaunchedEffect(state.changeServerAction, onDone) { is AsyncData.Success -> {
onDone() val latestOnDone by rememberUpdatedState(onDone)
LaunchedEffect(state.changeServerAction) {
latestOnDone()
}
} }
AsyncData.Uninitialized -> Unit AsyncData.Uninitialized -> Unit
} }
@@ -18,6 +18,8 @@ package io.element.android.features.logout.impl.ui
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.logout.impl.R import io.element.android.features.logout.impl.R
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
@@ -52,9 +54,11 @@ fun LogoutActionDialog(
onRetry = onForceLogoutClicked, onRetry = onForceLogoutClicked,
onDismiss = onDismissError, onDismiss = onDismissError,
) )
is AsyncAction.Success -> is AsyncAction.Success -> {
LaunchedEffect(state, onSuccessLogout) { val latestOnSuccessLogout by rememberUpdatedState(onSuccessLogout)
onSuccessLogout(state.data) LaunchedEffect(state) {
latestOnSuccessLogout(state.data)
} }
}
} }
} }
@@ -41,8 +41,10 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
@@ -294,8 +296,11 @@ private fun AttachmentStateView(
) { ) {
when (state) { when (state) {
AttachmentsState.None -> Unit AttachmentsState.None -> Unit
is AttachmentsState.Previewing -> LaunchedEffect(state, onPreviewAttachments) { is AttachmentsState.Previewing -> {
onPreviewAttachments(state.attachments) val latestOnPreviewAttachments by rememberUpdatedState(onPreviewAttachments)
LaunchedEffect(state) {
latestOnPreviewAttachments(state.attachments)
}
} }
is AttachmentsState.Sending -> { is AttachmentsState.Sending -> {
ProgressDialog( ProgressDialog(
@@ -24,6 +24,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@@ -57,8 +59,9 @@ fun AttachmentsPreviewView(
} }
if (state.sendActionState is SendActionState.Done) { if (state.sendActionState is SendActionState.Done) {
LaunchedEffect(state.sendActionState, onDismiss) { val latestOnDismiss by rememberUpdatedState(onDismiss)
onDismiss() LaunchedEffect(state.sendActionState) {
latestOnDismiss()
} }
} }
@@ -18,6 +18,8 @@ package io.element.android.features.rageshake.api.detection
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@@ -73,9 +75,10 @@ private fun TakeScreenshot(
onScreenshotTaken: (ImageResult) -> Unit onScreenshotTaken: (ImageResult) -> Unit
) { ) {
val view = LocalView.current val view = LocalView.current
LaunchedEffect(onScreenshotTaken) { val latestOnScreenshotTaken by rememberUpdatedState(onScreenshotTaken)
LaunchedEffect(Unit) {
view.screenshot { view.screenshot {
onScreenshotTaken(it) latestOnScreenshotTaken(it)
} }
} }
} }
@@ -18,6 +18,8 @@ package io.element.android.libraries.designsystem.components.async
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.components.ProgressDialog import io.element.android.libraries.designsystem.components.ProgressDialog
@@ -67,8 +69,9 @@ fun <T> AsyncActionView(
} }
} }
is AsyncAction.Success -> { is AsyncAction.Success -> {
LaunchedEffect(async, onSuccess) { val latestOnSuccess by rememberUpdatedState(onSuccess)
onSuccess(async.data) LaunchedEffect(async) {
latestOnSuccess(async.data)
} }
} }
} }
@@ -43,8 +43,9 @@ internal fun <T> SoftKeyboardEffect(
) { ) {
val view = LocalView.current val view = LocalView.current
val latestOnRequestFocus by rememberUpdatedState(onRequestFocus) val latestOnRequestFocus by rememberUpdatedState(onRequestFocus)
LaunchedEffect(key, predicate) { val latestPredicate by rememberUpdatedState(predicate)
if (predicate(key)) { LaunchedEffect(key) {
if (latestPredicate(key)) {
// Await window focus in case returning from a dialog // Await window focus in case returning from a dialog
view.awaitWindowFocus() view.awaitWindowFocus()