Skip to content

Commit b690347

Browse files
committed
perf: fix choppy home screen scrolling on mobile
- Remove per-card MutableInteractionSource + collectIsPressedAsState subscription from NoteCard — every visible card was holding an active state subscription during scroll, causing constant recomposition pressure - Remove spring animateFloatAsState scale animation from each NoteCard; Card native pressedElevation=4dp still provides tactile press feedback - Remove unused imports from HomeScreen (AnimatedVisibility, SwipeToDismiss, background, Color, duplicate Surface/Text declarations)
1 parent 97b88e1 commit b690347

2 files changed

Lines changed: 2 additions & 32 deletions

File tree

app/src/main/java/com/astralquarks/notes/ui/components/NoteCard.kt

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package com.astralquarks.notes.ui.components
22

3-
import androidx.compose.animation.core.animateFloatAsState
4-
import androidx.compose.animation.core.spring
5-
import androidx.compose.foundation.interaction.MutableInteractionSource
6-
import androidx.compose.foundation.interaction.collectIsPressedAsState
73
import androidx.compose.foundation.BorderStroke
84
import androidx.compose.foundation.background
95
import androidx.compose.foundation.isSystemInDarkTheme
@@ -45,18 +41,16 @@ import androidx.compose.material3.MaterialTheme
4541
import androidx.compose.material3.Surface
4642
import androidx.compose.material3.Text
4743
import androidx.compose.runtime.Composable
48-
import androidx.compose.runtime.getValue
4944
import androidx.compose.runtime.mutableStateOf
5045
import androidx.compose.runtime.remember
5146
import androidx.compose.runtime.setValue
5247
import androidx.compose.ui.Alignment
5348
import androidx.compose.ui.Modifier
5449
import androidx.compose.ui.draw.clip
50+
import androidx.compose.ui.draw.clipToBounds
5551
import androidx.compose.ui.graphics.Color
56-
import androidx.compose.ui.graphics.graphicsLayer
5752
import androidx.compose.ui.graphics.luminance
5853
import androidx.compose.ui.layout.ContentScale
59-
import androidx.compose.ui.draw.clipToBounds
6054
import androidx.compose.ui.platform.testTag
6155
import androidx.compose.ui.text.font.FontWeight
6256
import androidx.compose.ui.text.style.TextDecoration
@@ -142,21 +136,9 @@ fun NoteCard(
142136
}
143137
}
144138

145-
val interactionSource = remember { MutableInteractionSource() }
146-
val isPressed by interactionSource.collectIsPressedAsState()
147-
val scale by animateFloatAsState(
148-
targetValue = if (isPressed) 0.95f else 1f,
149-
animationSpec = spring(dampingRatio = 0.6f, stiffness = 300f),
150-
label = "card_scale"
151-
)
152-
153139
Card(
154140
onClick = onClick,
155-
interactionSource = interactionSource,
156-
modifier = modifier.fillMaxWidth().testTag("note_card_${note.id}").graphicsLayer {
157-
scaleX = scale
158-
scaleY = scale
159-
},
141+
modifier = modifier.fillMaxWidth().testTag("note_card_${note.id}"),
160142
shape = RoundedCornerShape(32.dp),
161143
colors = CardDefaults.cardColors(containerColor = cardBg),
162144
border = BorderStroke(
@@ -165,7 +147,6 @@ fun NoteCard(
165147
else MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.4f)
166148
),
167149
elevation = CardDefaults.cardElevation(defaultElevation = 1.dp, pressedElevation = 4.dp)
168-
169150
) {
170151
Column(modifier = Modifier.fillMaxWidth()) {
171152
// Optional image header

app/src/main/java/com/astralquarks/notes/ui/screens/HomeScreen.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package com.astralquarks.notes.ui.screens
22

3-
import androidx.compose.animation.AnimatedVisibility
4-
import androidx.compose.animation.fadeIn
5-
import androidx.compose.animation.fadeOut
63
import androidx.compose.animation.core.animateFloatAsState
74
import androidx.compose.animation.core.spring
85
import androidx.compose.foundation.interaction.MutableInteractionSource
96
import androidx.compose.foundation.interaction.collectIsPressedAsState
107
import androidx.compose.ui.graphics.graphicsLayer
118
import androidx.compose.foundation.ExperimentalFoundationApi
12-
import androidx.compose.foundation.background
139
import androidx.compose.foundation.clickable
1410
import androidx.compose.foundation.horizontalScroll
1511
import androidx.compose.foundation.layout.Arrangement
@@ -63,18 +59,12 @@ import androidx.compose.material.icons.filled.Code
6359
import androidx.compose.material.icons.filled.Edit
6460
import androidx.compose.material.icons.filled.TextFields
6561
import androidx.compose.material3.ModalBottomSheet
66-
import androidx.compose.material3.rememberModalBottomSheetState
6762
import com.astralquarks.notes.ui.components.ImageUrlDialog
6863
import kotlinx.coroutines.Dispatchers
6964
import kotlinx.coroutines.launch
7065
import kotlinx.coroutines.withContext
7166
import androidx.compose.runtime.rememberCoroutineScope
7267
import androidx.compose.material3.Scaffold
73-
import androidx.compose.material3.Surface
74-
import androidx.compose.material3.SwipeToDismissBox
75-
import androidx.compose.material3.SwipeToDismissBoxValue
76-
import androidx.compose.material3.Text
77-
import androidx.compose.material3.rememberSwipeToDismissBoxState
7868
import androidx.compose.runtime.Composable
7969
import androidx.compose.runtime.getValue
8070
import androidx.compose.runtime.mutableStateOf
@@ -83,7 +73,6 @@ import androidx.compose.runtime.setValue
8373
import androidx.compose.ui.Alignment
8474
import androidx.compose.ui.Modifier
8575
import androidx.compose.ui.draw.clip
86-
import androidx.compose.ui.graphics.Color
8776
import androidx.compose.ui.platform.LocalContext
8877
import androidx.compose.ui.platform.testTag
8978
import androidx.compose.ui.text.font.FontWeight

0 commit comments

Comments
 (0)