Skip to content

Commit a7d6294

Browse files
committed
Add previews
1 parent 24c17ec commit a7d6294

File tree

2 files changed

+147
-0
lines changed

2 files changed

+147
-0
lines changed

feature/chat/ui/src/main/java/io/jja08111/gemini/feature/chat/ui/ChatScreen.kt

+119
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
4747
import androidx.compose.ui.input.pointer.pointerInput
4848
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
4949
import androidx.compose.ui.res.stringResource
50+
import androidx.compose.ui.tooling.preview.Preview
5051
import androidx.compose.ui.unit.dp
5152
import androidx.lifecycle.compose.collectAsStateWithLifecycle
5253
import io.jja08111.gemini.core.ui.rememberPrevious
@@ -59,7 +60,10 @@ import io.jja08111.gemini.feature.chat.ui.component.rememberModelResponseDropdow
5960
import io.jja08111.gemini.model.MessageGroup
6061
import io.jja08111.gemini.model.ModelResponse
6162
import io.jja08111.gemini.model.ModelResponseState
63+
import io.jja08111.gemini.model.Prompt
64+
import kotlinx.coroutines.flow.flowOf
6265
import kotlinx.coroutines.launch
66+
import java.time.LocalDateTime
6367

6468
// TODO: Show keyboard when enter this screen
6569
@Composable
@@ -336,3 +340,118 @@ private fun ScrollPositionSideEffect(messageGroups: List<MessageGroup>, listStat
336340
}
337341
}
338342
}
343+
344+
@Preview
345+
@Composable
346+
private fun EmptyChatScreenPreview() {
347+
val uiState = ChatUiState(messageGroupStream = flowOf(listOf()))
348+
349+
MaterialTheme {
350+
ChatScreen(
351+
uiState = uiState,
352+
snackbarHostState = SnackbarHostState(),
353+
onBackClick = {},
354+
onInputUpdate = {},
355+
onCameraClick = {},
356+
onAlbumClick = {},
357+
onRemoveImageClick = {},
358+
onSendClick = {},
359+
onRegenerateOnErrorClick = {},
360+
onSelectResponseClick = {},
361+
onRegenerateResponseClick = {},
362+
)
363+
}
364+
}
365+
366+
@Preview
367+
@Composable
368+
private fun ChatScreenPreview() {
369+
val messageGroups = listOf(
370+
MessageGroup(
371+
responseCount = 1,
372+
prompt = Prompt(
373+
roomId = "id",
374+
text = "Hello",
375+
images = emptyList(),
376+
),
377+
selectedResponse = ModelResponse(
378+
text = "Hi nice to meet you.",
379+
roomId = "id",
380+
selected = true,
381+
state = ModelResponseState.Generated,
382+
createdAt = LocalDateTime.of(2024, 8, 30, 8, 10),
383+
),
384+
),
385+
MessageGroup(
386+
responseCount = 1,
387+
prompt = Prompt(
388+
roomId = "id",
389+
text = "Okay",
390+
images = emptyList(),
391+
),
392+
selectedResponse = ModelResponse(
393+
text = "Good. How can I help you?",
394+
roomId = "id",
395+
state = ModelResponseState.Generated,
396+
selected = true,
397+
createdAt = LocalDateTime.of(2024, 8, 30, 8, 10),
398+
),
399+
),
400+
)
401+
val uiState = ChatUiState(messageGroupStream = flowOf(messageGroups))
402+
403+
MaterialTheme {
404+
ChatScreen(
405+
uiState = uiState,
406+
snackbarHostState = SnackbarHostState(),
407+
onBackClick = {},
408+
onInputUpdate = {},
409+
onCameraClick = {},
410+
onAlbumClick = {},
411+
onRemoveImageClick = {},
412+
onSendClick = {},
413+
onRegenerateOnErrorClick = {},
414+
onSelectResponseClick = {},
415+
onRegenerateResponseClick = {},
416+
)
417+
}
418+
}
419+
420+
@Preview
421+
@Composable
422+
private fun ErrorChatScreenPreview() {
423+
val messageGroups = listOf(
424+
MessageGroup(
425+
responseCount = 1,
426+
prompt = Prompt(
427+
roomId = "id",
428+
text = "Okay",
429+
images = emptyList(),
430+
),
431+
selectedResponse = ModelResponse(
432+
text = "Good. How ca",
433+
roomId = "id",
434+
state = ModelResponseState.Error,
435+
selected = true,
436+
createdAt = LocalDateTime.of(2024, 8, 30, 8, 10),
437+
),
438+
),
439+
)
440+
val uiState = ChatUiState(messageGroupStream = flowOf(messageGroups))
441+
442+
MaterialTheme {
443+
ChatScreen(
444+
uiState = uiState,
445+
snackbarHostState = SnackbarHostState(),
446+
onBackClick = {},
447+
onInputUpdate = {},
448+
onCameraClick = {},
449+
onAlbumClick = {},
450+
onRemoveImageClick = {},
451+
onSendClick = {},
452+
onRegenerateOnErrorClick = {},
453+
onSelectResponseClick = {},
454+
onRegenerateResponseClick = {},
455+
)
456+
}
457+
}

feature/chat/ui/src/main/java/io/jja08111/gemini/feature/chat/ui/component/MessageGroup.kt

+28
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ package io.jja08111.gemini.feature.chat.ui.component
22

33
import androidx.compose.foundation.layout.Column
44
import androidx.compose.foundation.layout.padding
5+
import androidx.compose.material3.MaterialTheme
56
import androidx.compose.runtime.Composable
67
import androidx.compose.ui.Alignment
78
import androidx.compose.ui.Modifier
9+
import androidx.compose.ui.tooling.preview.Preview
810
import androidx.compose.ui.unit.dp
911
import io.jja08111.gemini.model.MessageGroup
1012
import io.jja08111.gemini.model.ModelResponse
1113
import io.jja08111.gemini.model.ModelResponseState
14+
import io.jja08111.gemini.model.Prompt
15+
import java.time.LocalDateTime
1216

1317
@Composable
1418
internal fun MessageGroup(
@@ -39,3 +43,27 @@ internal fun MessageGroup(
3943
)
4044
}
4145
}
46+
47+
@Preview(showBackground = true)
48+
@Composable
49+
private fun MessageGroupPreview() {
50+
MaterialTheme {
51+
MessageGroup(
52+
messageGroup = MessageGroup(
53+
responseCount = 1,
54+
prompt = Prompt(
55+
roomId = "id",
56+
text = "Hello",
57+
images = emptyList(),
58+
),
59+
selectedResponse = ModelResponse(
60+
text = "Hi nice to meet you.",
61+
roomId = "id",
62+
selected = true,
63+
createdAt = LocalDateTime.of(2024, 8, 30, 8, 10),
64+
),
65+
),
66+
onModelResponseLongClick = {},
67+
)
68+
}
69+
}

0 commit comments

Comments
 (0)