Replace mutableStateOf by mutableIntStateOf and mutableFloatStateOf. Use intValue and floatValue to avoid unboxing.

This commit is contained in:
Benoit Marty 2023-09-26 18:07:24 +02:00
parent 6eed650ad0
commit 99caa031e8
8 changed files with 31 additions and 26 deletions

View file

@ -21,7 +21,7 @@ import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -64,7 +64,7 @@ fun StaticMapView(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
val context = LocalContext.current val context = LocalContext.current
var retryHash by remember { mutableStateOf(0) } var retryHash by remember { mutableIntStateOf(0) }
val builder = remember { StaticMapUrlBuilder(context) } val builder = remember { StaticMapUrlBuilder(context) }
val painter = rememberAsyncImagePainter( val painter = rememberAsyncImagePainter(
model = if (constraints.isZero) { model = if (constraints.isZero) {

View file

@ -18,6 +18,7 @@ package io.element.android.features.login.impl.screens.waitlistscreen
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
@ -58,14 +59,14 @@ class WaitListPresenter @AssistedInject constructor(
mutableStateOf(Async.Uninitialized) mutableStateOf(Async.Uninitialized)
} }
val attemptNumber: MutableState<Int> = remember { mutableStateOf(0) } val attemptNumber = remember { mutableIntStateOf(0) }
fun handleEvents(event: WaitListEvents) { fun handleEvents(event: WaitListEvents) {
when (event) { when (event) {
WaitListEvents.AttemptLogin -> { WaitListEvents.AttemptLogin -> {
// Do not attempt to login on first resume of the View. // Do not attempt to login on first resume of the View.
attemptNumber.value++ attemptNumber.intValue++
if (attemptNumber.value > 1) { if (attemptNumber.intValue > 1) {
coroutineScope.loginAttempt(formState, loginAction) coroutineScope.loginAttempt(formState, loginAction)
} }
} }

View file

@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
@ -59,7 +60,7 @@ class MediaViewerPresenter @AssistedInject constructor(
@Composable @Composable
override fun present(): MediaViewerState { override fun present(): MediaViewerState {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
var loadMediaTrigger by remember { mutableStateOf(0) } var loadMediaTrigger by remember { mutableIntStateOf(0) }
val mediaFile: MutableState<MediaFile?> = remember { val mediaFile: MutableState<MediaFile?> = remember {
mutableStateOf(null) mutableStateOf(null)
} }

View file

@ -147,7 +147,7 @@ fun TimelineItemEventRow(
} }
if (canReply) { if (canReply) {
val state: SwipeableActionsState = rememberSwipeableActionsState() val state: SwipeableActionsState = rememberSwipeableActionsState()
val offset = state.offset.value val offset = state.offset.floatValue
val swipeThresholdPx = 40.dp.toPx() val swipeThresholdPx = 40.dp.toPx()
val thresholdCrossed = abs(offset) > swipeThresholdPx val thresholdCrossed = abs(offset) > swipeThresholdPx
SwipeSensitivity(3f) { SwipeSensitivity(3f) {

View file

@ -17,9 +17,11 @@
package io.element.android.features.rageshake.impl.bugreport package io.element.android.features.rageshake.impl.bugreport
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableFloatState
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
@ -43,27 +45,27 @@ class BugReportPresenter @Inject constructor(
) : Presenter<BugReportState> { ) : Presenter<BugReportState> {
private class BugReporterUploadListener( private class BugReporterUploadListener(
private val sendingProgress: MutableState<Float>, private val sendingProgress: MutableFloatState,
private val sendingAction: MutableState<Async<Unit>> private val sendingAction: MutableState<Async<Unit>>
) : BugReporterListener { ) : BugReporterListener {
override fun onUploadCancelled() { override fun onUploadCancelled() {
sendingProgress.value = 0f sendingProgress.floatValue = 0f
sendingAction.value = Async.Uninitialized sendingAction.value = Async.Uninitialized
} }
override fun onUploadFailed(reason: String?) { override fun onUploadFailed(reason: String?) {
sendingProgress.value = 0f sendingProgress.floatValue = 0f
sendingAction.value = Async.Failure(Exception(reason)) sendingAction.value = Async.Failure(Exception(reason))
} }
override fun onProgress(progress: Int) { override fun onProgress(progress: Int) {
sendingProgress.value = progress.toFloat() / 100 sendingProgress.floatValue = progress.toFloat() / 100
sendingAction.value = Async.Loading() sendingAction.value = Async.Loading()
} }
override fun onUploadSucceed(reportUrl: String?) { override fun onUploadSucceed(reportUrl: String?) {
sendingProgress.value = 0f sendingProgress.floatValue = 0f
sendingAction.value = Async.Success(Unit) sendingAction.value = Async.Success(Unit)
} }
} }
@ -80,7 +82,7 @@ class BugReportPresenter @Inject constructor(
.collectAsState(initial = "") .collectAsState(initial = "")
val sendingProgress = remember { val sendingProgress = remember {
mutableStateOf(0f) mutableFloatStateOf(0f)
} }
val sendingAction: MutableState<Async<Unit>> = remember { val sendingAction: MutableState<Async<Unit>> = remember {
mutableStateOf(Async.Uninitialized) mutableStateOf(Async.Uninitialized)
@ -107,7 +109,7 @@ class BugReportPresenter @Inject constructor(
copy(sendScreenshot = event.sendScreenshot) copy(sendScreenshot = event.sendScreenshot)
} }
BugReportEvents.ClearError -> { BugReportEvents.ClearError -> {
sendingProgress.value = 0f sendingProgress.floatValue = 0f
sendingAction.value = Async.Uninitialized sendingAction.value = Async.Uninitialized
} }
} }
@ -115,7 +117,7 @@ class BugReportPresenter @Inject constructor(
return BugReportState( return BugReportState(
hasCrashLogs = crashInfo.isNotEmpty(), hasCrashLogs = crashInfo.isNotEmpty(),
sendingProgress = sendingProgress.value, sendingProgress = sendingProgress.floatValue,
sending = sendingAction.value, sending = sendingAction.value,
formState = formState.value, formState = formState.value,
screenshotUri = screenshotUri.value, screenshotUri = screenshotUri.value,

View file

@ -21,9 +21,10 @@ import androidx.compose.animation.core.tween
import androidx.compose.foundation.MutatePriority import androidx.compose.foundation.MutatePriority
import androidx.compose.foundation.gestures.DraggableState import androidx.compose.foundation.gestures.DraggableState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.FloatState
import androidx.compose.runtime.Stable import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
@ -41,8 +42,8 @@ class SwipeableActionsState {
/** /**
* The current position (in pixels) of the content. * The current position (in pixels) of the content.
*/ */
val offset: State<Float> get() = offsetState val offset: FloatState get() = offsetState
private var offsetState = mutableStateOf(0f) private var offsetState = mutableFloatStateOf(0f)
/** /**
* Whether the content is currently animating to reset its offset after it was swiped. * Whether the content is currently animating to reset its offset after it was swiped.
@ -51,21 +52,21 @@ class SwipeableActionsState {
private set private set
val draggableState = DraggableState { delta -> val draggableState = DraggableState { delta ->
val targetOffset = offsetState.value + delta val targetOffset = offsetState.floatValue + delta
val isAllowed = isResettingOnRelease || targetOffset > 0f val isAllowed = isResettingOnRelease || targetOffset > 0f
offsetState.value += if (isAllowed) delta else 0f offsetState.floatValue += if (isAllowed) delta else 0f
} }
suspend fun resetOffset() { suspend fun resetOffset() {
draggableState.drag(MutatePriority.PreventUserInput) { draggableState.drag(MutatePriority.PreventUserInput) {
isResettingOnRelease = true isResettingOnRelease = true
try { try {
Animatable(offsetState.value).animateTo( Animatable(offsetState.floatValue).animateTo(
targetValue = 0f, targetValue = 0f,
animationSpec = tween(durationMillis = 300), animationSpec = tween(durationMillis = 300),
) { ) {
dragBy(value - offsetState.value) dragBy(value - offsetState.floatValue)
} }
} finally { } finally {
isResettingOnRelease = false isResettingOnRelease = false

View file

@ -22,7 +22,7 @@ import androidx.compose.material3.SliderColors
import androidx.compose.material3.SliderDefaults import androidx.compose.material3.SliderDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -62,7 +62,7 @@ internal fun SlidersPreview() = ElementThemedPreview { ContentToPreview() }
@Composable @Composable
private fun ContentToPreview() { private fun ContentToPreview() {
var value by remember { mutableStateOf(0.33f) } var value by remember { mutableFloatStateOf(0.33f) }
Column { Column {
Slider(onValueChange = { value = it }, value = value, enabled = true) Slider(onValueChange = { value = it }, value = value, enabled = true)
Slider(steps = 10, onValueChange = { value = it }, value = value, enabled = true) Slider(steps = 10, onValueChange = { value = it }, value = value, enabled = true)

View file

@ -29,7 +29,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
@ -55,7 +55,7 @@ fun SelectedUsersList(
) { ) {
val lazyListState = rememberLazyListState() val lazyListState = rememberLazyListState()
if (autoScroll) { if (autoScroll) {
var currentSize by rememberSaveable { mutableStateOf(selectedUsers.size) } var currentSize by rememberSaveable { mutableIntStateOf(selectedUsers.size) }
LaunchedEffect(selectedUsers.size) { LaunchedEffect(selectedUsers.size) {
val isItemAdded = selectedUsers.size > currentSize val isItemAdded = selectedUsers.size > currentSize
if (isItemAdded) { if (isItemAdded) {