Skip to content

Commit 6eea865

Browse files
committed
do not show sticky header when new message is received and user is near newest message
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
1 parent a423f6d commit 6eea865

1 file changed

Lines changed: 22 additions & 9 deletions

File tree

  • app/src/main/java/com/nextcloud/talk/ui/chat

app/src/main/java/com/nextcloud/talk/ui/chat/ChatView.kt

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import com.nextcloud.talk.chat.data.model.ChatMessage
5757
import com.nextcloud.talk.chat.viewmodels.ChatViewModel
5858
import com.nextcloud.talk.data.user.model.User
5959
import kotlinx.coroutines.delay
60+
import kotlinx.coroutines.flow.collectLatest
6061
import kotlinx.coroutines.flow.distinctUntilChanged
6162
import kotlinx.coroutines.flow.map
6263
import kotlinx.coroutines.launch
@@ -94,6 +95,12 @@ fun GetNewChatView(
9495
}
9596
}
9697

98+
val isNearNewest by remember(listState) {
99+
derivedStateOf {
100+
listState.firstVisibleItemIndex <= 2
101+
}
102+
}
103+
97104
// Show floating scroll-to-newest button when not at newest
98105
val showScrollToNewest by remember { derivedStateOf { !isAtNewest } }
99106

@@ -174,16 +181,22 @@ fun GetNewChatView(
174181

175182
var stickyDateHeader by remember { mutableStateOf(false) }
176183

177-
LaunchedEffect(listState) {
178-
snapshotFlow { listState.isScrollInProgress }
179-
.collect { scrolling ->
180-
if (scrolling) {
181-
stickyDateHeader = true
182-
} else {
183-
delay(1200)
184-
stickyDateHeader = false
184+
LaunchedEffect(listState, isNearNewest) {
185+
// Only listen to scroll if user is away from newest messages. This ensures the stickyHeader is not shown on
186+
// every new received message when being at the bottom of the list (because this triggers a scroll).
187+
if (!isNearNewest) {
188+
snapshotFlow { listState.isScrollInProgress }
189+
.collectLatest { scrolling ->
190+
if (scrolling) {
191+
stickyDateHeader = true
192+
} else {
193+
delay(1200)
194+
stickyDateHeader = false
195+
}
185196
}
186-
}
197+
} else {
198+
stickyDateHeader = false
199+
}
187200
}
188201

189202
val stickyDateHeaderAlpha by animateFloatAsState(

0 commit comments

Comments
 (0)