@@ -33,7 +33,6 @@ import androidx.compose.material3.Card
33
33
import androidx.compose.material3.ExperimentalMaterial3Api
34
34
import androidx.compose.material3.Icon
35
35
import androidx.compose.material3.MaterialTheme
36
- import androidx.compose.material3.ModalBottomSheet
37
36
import androidx.compose.material3.OutlinedButton
38
37
import androidx.compose.material3.RadioButton
39
38
import androidx.compose.material3.Scaffold
@@ -42,9 +41,7 @@ import androidx.compose.material3.TextButton
42
41
import androidx.compose.material3.TextField
43
42
import androidx.compose.material3.TopAppBar
44
43
import androidx.compose.material3.TopAppBarDefaults.topAppBarColors
45
- import androidx.compose.material3.rememberModalBottomSheetState
46
44
import androidx.compose.runtime.Composable
47
- import androidx.compose.runtime.collectAsState
48
45
import androidx.compose.runtime.getValue
49
46
import androidx.compose.runtime.mutableStateOf
50
47
import androidx.compose.runtime.remember
@@ -61,27 +58,26 @@ import androidx.compose.ui.unit.sp
61
58
import androidx.compose.ui.window.Dialog
62
59
import androidx.core.net.toUri
63
60
import androidx.hilt.navigation.compose.hiltViewModel
61
+ import androidx.lifecycle.compose.collectAsStateWithLifecycle
64
62
import com.android.ai.samples.geminimultimodal.R
65
63
import com.google.mlkit.genai.rewriting.RewriterOptions
66
64
67
65
@OptIn(ExperimentalMaterial3Api ::class )
68
66
@Composable
69
67
fun GenAIWritingAssistanceScreen (viewModel : GenAIWritingAssistanceViewModel = hiltViewModel()) {
68
+ val uiState by viewModel.uiState.collectAsStateWithLifecycle()
70
69
71
- val sheetState = rememberModalBottomSheetState()
72
- var showBottomSheet by remember { mutableStateOf(false ) }
73
70
var showRewriteOptionsDialog by remember { mutableStateOf(false ) }
74
71
val context = LocalContext .current
75
72
76
- val resultGenerated = viewModel.resultGenerated.collectAsState()
77
-
78
73
val proofreadSampleTextOptions = stringArrayResource(R .array.proofread_sample_text)
79
74
val rewriteSampleTextOptions = stringArrayResource(R .array.rewrite_sample_text)
80
75
81
76
var textInput by remember { mutableStateOf(" " ) }
82
77
83
78
Scaffold (
84
- modifier = Modifier .fillMaxSize(), topBar = {
79
+ modifier = Modifier .fillMaxSize(),
80
+ topBar = {
85
81
TopAppBar (
86
82
colors = topAppBarColors(
87
83
containerColor = MaterialTheme .colorScheme.primaryContainer,
@@ -112,14 +108,40 @@ fun GenAIWritingAssistanceScreen(viewModel: GenAIWritingAssistanceViewModel = hi
112
108
.weight(.8f ),
113
109
)
114
110
111
+ val outputText = when (val state = uiState) {
112
+ is GenAIWritingAssistanceUiState .DownloadingFeature -> stringResource(
113
+ id = R .string.genai_writing_assistance_downloading,
114
+ state.bytesDownloaded,
115
+ state.bytesToDownload,
116
+ )
117
+
118
+ is GenAIWritingAssistanceUiState .Error -> stringResource(state.errorMessageStringRes)
119
+ is GenAIWritingAssistanceUiState .Success -> state.generatedOutput
120
+ is GenAIWritingAssistanceUiState .Generating -> stringResource(id = R .string.generating)
121
+ GenAIWritingAssistanceUiState .CheckingFeatureStatus -> stringResource(id = R .string.checking_feature_status)
122
+ GenAIWritingAssistanceUiState .Initial -> " " // Show nothing for the Initial state
123
+ }
124
+
125
+ // Output box
126
+ Card (
127
+ modifier = Modifier
128
+ .fillMaxWidth()
129
+ .weight(1f )
130
+ .padding(horizontal = 16 .dp, vertical = 8 .dp),
131
+ ) {
132
+ Text (
133
+ text = outputText,
134
+ modifier = Modifier .padding(16 .dp),
135
+ )
136
+ }
137
+
115
138
Row (modifier = Modifier .fillMaxWidth(), horizontalArrangement = Arrangement .Center ) {
116
139
// Proofread button
117
140
Button (
118
141
onClick = {
119
- showBottomSheet = true
120
142
viewModel.proofread(textInput, context)
121
143
},
122
- Modifier .padding(10 .dp),
144
+ Modifier .padding(8 .dp),
123
145
) {
124
146
Text (
125
147
stringResource(id = R .string.genai_writing_assistance_proofread_btn),
@@ -129,7 +151,7 @@ fun GenAIWritingAssistanceScreen(viewModel: GenAIWritingAssistanceViewModel = hi
129
151
onClick = {
130
152
showRewriteOptionsDialog = true
131
153
},
132
- Modifier .padding(10 .dp),
154
+ Modifier .padding(8 .dp),
133
155
) {
134
156
Text (
135
157
stringResource(id = R .string.genai_writing_assistance_rewrite_btn),
@@ -145,7 +167,9 @@ fun GenAIWritingAssistanceScreen(viewModel: GenAIWritingAssistanceViewModel = hi
145
167
) {
146
168
OutlinedButton (
147
169
onClick = { textInput = proofreadSampleTextOptions.random() },
148
- Modifier .weight(1f ).padding(5 .dp),
170
+ Modifier
171
+ .weight(1f )
172
+ .padding(4 .dp),
149
173
) {
150
174
Text (
151
175
stringResource(id = R .string.genai_writing_assistance_proofread_sample_text_btn),
@@ -155,7 +179,9 @@ fun GenAIWritingAssistanceScreen(viewModel: GenAIWritingAssistanceViewModel = hi
155
179
156
180
OutlinedButton (
157
181
onClick = { textInput = rewriteSampleTextOptions.random() },
158
- Modifier .weight(1f ).padding(5 .dp),
182
+ Modifier
183
+ .weight(1f )
184
+ .padding(4 .dp),
159
185
) {
160
186
Text (
161
187
stringResource(id = R .string.genai_writing_assistance_rewrite_sample_text_btn),
@@ -164,8 +190,13 @@ fun GenAIWritingAssistanceScreen(viewModel: GenAIWritingAssistanceViewModel = hi
164
190
}
165
191
166
192
OutlinedButton (
167
- onClick = { textInput = " " },
168
- Modifier .weight(1f ).padding(5 .dp),
193
+ onClick = {
194
+ textInput = " "
195
+ viewModel.clearGeneratedText()
196
+ },
197
+ Modifier
198
+ .weight(1f )
199
+ .padding(4 .dp),
169
200
) {
170
201
Text (
171
202
stringResource(id = R .string.genai_writing_assistance_reset_btn),
@@ -175,31 +206,10 @@ fun GenAIWritingAssistanceScreen(viewModel: GenAIWritingAssistanceViewModel = hi
175
206
}
176
207
}
177
208
178
- if (showBottomSheet) {
179
- ModalBottomSheet (
180
- onDismissRequest = {
181
- showBottomSheet = false
182
- viewModel.clearGeneratedText()
183
- },
184
- sheetState = sheetState,
185
- ) {
186
- Text (
187
- text = resultGenerated.value,
188
- modifier = Modifier .padding(
189
- top = 8 .dp,
190
- bottom = 24 .dp,
191
- start = 24 .dp,
192
- end = 24 .dp,
193
- ),
194
- )
195
- }
196
- }
197
-
198
209
if (showRewriteOptionsDialog) {
199
210
RewriteOptionsDialog (
200
211
onConfirm = { rewriteStyleSelected ->
201
212
showRewriteOptionsDialog = false
202
- showBottomSheet = true
203
213
viewModel.rewrite(
204
214
textInput,
205
215
rewriteStyleSelected.rewriteStyle,
0 commit comments