Commit 43eda77
authored
Fix chat scroll UI (#231)
* Fix chat scroll UI: smart auto-scroll, stable keys, and scroll-to-bottom FAB
The conversation scroll had several issues: auto-scroll fired on every
token during generation (forcing users back to bottom even when reading
history), LazyColumn keys included list index (defeating item reuse),
and the clickable modifier for keyboard dismiss interfered with scroll
gestures.
- Add unique id field to Message for stable LazyColumn keys
- Replace per-token scrollTrigger with throttled polling (300ms) that
only scrolls when user is near bottom (derivedStateOf detection)
- Use instant scrollToItem during generation, animateScrollToItem on
completion
- Add SmallFloatingActionButton to jump back to bottom when scrolled up
- Replace clickable with pointerInput/detectTapGestures for keyboard
dismiss to avoid scroll gesture interference
* Fix Gson deserialization crash and remove dead scrollTrigger code
Use GsonBuilder with InstanceCreator for Message deserialization so
that default field values (notably the new `id` field) are properly
initialized when loading saved messages from older JSON that lacks
the field. Without this, Gson's Unsafe.allocateInstance() leaves `id`
as null, crashing LazyColumn's stable-key lookup.
Also remove the now-unused `scrollTrigger` state — ChatScreen no longer
observes it after the scroll rework, so each-token increments were just
wasted snapshot notifications.1 parent b818840 commit 43eda77
3 files changed
Lines changed: 93 additions & 28 deletions
File tree
- llm/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo
- ui
- screens
- viewmodel
Lines changed: 4 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
29 | | - | |
| 30 | + | |
| 31 | + | |
30 | 32 | | |
31 | 33 | | |
32 | 34 | | |
| |||
62 | 64 | | |
63 | 65 | | |
64 | 66 | | |
65 | | - | |
| 67 | + | |
66 | 68 | | |
67 | 69 | | |
68 | 70 | | |
| |||
Lines changed: 79 additions & 19 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| 21 | + | |
20 | 22 | | |
21 | | - | |
| 23 | + | |
22 | 24 | | |
23 | 25 | | |
24 | 26 | | |
25 | 27 | | |
| 28 | + | |
26 | 29 | | |
27 | 30 | | |
28 | 31 | | |
29 | 32 | | |
30 | 33 | | |
31 | 34 | | |
32 | 35 | | |
| 36 | + | |
33 | 37 | | |
34 | 38 | | |
35 | 39 | | |
36 | 40 | | |
37 | 41 | | |
38 | 42 | | |
39 | 43 | | |
| 44 | + | |
40 | 45 | | |
41 | 46 | | |
42 | 47 | | |
| 48 | + | |
43 | 49 | | |
| 50 | + | |
44 | 51 | | |
| 52 | + | |
45 | 53 | | |
46 | 54 | | |
47 | 55 | | |
| |||
53 | 61 | | |
54 | 62 | | |
55 | 63 | | |
| 64 | + | |
56 | 65 | | |
57 | 66 | | |
58 | 67 | | |
| |||
72 | 81 | | |
73 | 82 | | |
74 | 83 | | |
| 84 | + | |
75 | 85 | | |
76 | | - | |
77 | | - | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
78 | 97 | | |
79 | 98 | | |
80 | 99 | | |
81 | 100 | | |
82 | 101 | | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
83 | 118 | | |
84 | 119 | | |
85 | 120 | | |
| |||
165 | 200 | | |
166 | 201 | | |
167 | 202 | | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
| 203 | + | |
| 204 | + | |
173 | 205 | | |
174 | 206 | | |
175 | | - | |
176 | | - | |
177 | | - | |
| 207 | + | |
| 208 | + | |
178 | 209 | | |
179 | 210 | | |
180 | 211 | | |
181 | | - | |
182 | | - | |
183 | 212 | | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
189 | 249 | | |
190 | 250 | | |
191 | 251 | | |
| |||
Lines changed: 10 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
| 35 | + | |
34 | 36 | | |
35 | 37 | | |
36 | 38 | | |
| |||
63 | 65 | | |
64 | 66 | | |
65 | 67 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | 68 | | |
71 | 69 | | |
72 | 70 | | |
| |||
125 | 123 | | |
126 | 124 | | |
127 | 125 | | |
128 | | - | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
129 | 134 | | |
130 | 135 | | |
131 | 136 | | |
| |||
810 | 815 | | |
811 | 816 | | |
812 | 817 | | |
813 | | - | |
814 | | - | |
815 | 818 | | |
816 | 819 | | |
817 | 820 | | |
| |||
0 commit comments