Skip to content

Commit

Permalink
Add scroll to bottom icon
Browse files Browse the repository at this point in the history
  • Loading branch information
Taewan-P committed Oct 8, 2024
1 parent 6913f37 commit a44f2fa
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,17 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.rounded.KeyboardArrowDown
import androidx.compose.material3.BottomAppBarDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FabPosition
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SmallFloatingActionButton
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
Expand All @@ -40,6 +43,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
Expand All @@ -63,6 +67,7 @@ import dev.chungjungsoo.gptmobile.data.model.ApiType
import dev.chungjungsoo.gptmobile.util.collectManagedState
import dev.chungjungsoo.gptmobile.util.multiScrollStateSaver
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

@OptIn(ExperimentalMaterial3Api::class)
@Composable
Expand Down Expand Up @@ -101,6 +106,8 @@ fun ChatScreen(
val latestMessageIndex = groupedMessages.keys.maxOrNull() ?: 0
val chatBubbleScrollStates = rememberSaveable(saver = multiScrollStateSaver) { MutableList(latestMessageIndex + 2) { ScrollState(0) } }

val scope = rememberCoroutineScope()

LaunchedEffect(latestMessageIndex) {
val opponentBubbles = ((latestMessageIndex + 1) / 2) + 1
val scrollStatesToAdd = opponentBubbles - chatBubbleScrollStates.size
Expand Down Expand Up @@ -142,8 +149,15 @@ fun ChatScreen(
}
},
floatingActionButton = {
}

if (listState.canScrollForward) {
ScrollToBottomButton {
scope.launch {
listState.animateScrollToItem(groupedMessages.keys.size)
}
}
}
},
floatingActionButtonPosition = FabPosition.Center
) { innerPadding ->
groupedMessages.forEach { (i, k) -> Log.d("grouped", "idx: $i, data: $k") }
LazyColumn(
Expand Down Expand Up @@ -358,3 +372,14 @@ fun ChatInputBox(
)
}
}

@Composable
fun ScrollToBottomButton(onClick: () -> Unit) {
SmallFloatingActionButton(
onClick = onClick,
containerColor = MaterialTheme.colorScheme.tertiaryContainer,
contentColor = MaterialTheme.colorScheme.onTertiaryContainer
) {
Icon(Icons.Rounded.KeyboardArrowDown, stringResource(R.string.scroll_to_bottom_icon))
}
}
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,5 @@
<string name="bug_report">Bug Report</string>
<string name="bug_report_description">Something isn\'t working correctly?</string>
<string name="bug_report_icon">Bug Report Icon</string>
<string name="scroll_to_bottom_icon">Scroll to bottom icon</string>
</resources>

0 comments on commit a44f2fa

Please sign in to comment.