Skip to content

Commit 0fb7d4e

Browse files
committed
fix translation flow
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 669acbe commit 0fb7d4e

4 files changed

Lines changed: 41 additions & 9 deletions

File tree

app/src/main/java/com/nextcloud/client/assistant/AssistantScreen.kt

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import androidx.compose.foundation.lazy.items
2424
import androidx.compose.foundation.pager.HorizontalPager
2525
import androidx.compose.foundation.pager.rememberPagerState
2626
import androidx.compose.material3.ExperimentalMaterial3Api
27+
import androidx.compose.material3.FloatingActionButton
2728
import androidx.compose.material3.Icon
2829
import androidx.compose.material3.IconButton
2930
import androidx.compose.material3.LinearProgressIndicator
@@ -96,6 +97,7 @@ fun AssistantScreen(
9697
val messageId by viewModel.snackbarMessageId.collectAsState()
9798
val screenOverlayState by viewModel.screenOverlayState.collectAsState()
9899
val selectedTaskType by viewModel.selectedTaskType.collectAsState()
100+
val isTranslationTask by viewModel.isTranslationTask.collectAsState()
99101
val filteredTaskList by viewModel.filteredTaskList.collectAsState()
100102
val screenState by viewModel.screenState.collectAsState()
101103
val taskTypes by viewModel.taskTypes.collectAsState()
@@ -192,7 +194,7 @@ fun AssistantScreen(
192194
}
193195
},
194196
bottomBar = {
195-
if (!taskTypes.isNullOrEmpty()) {
197+
if (!taskTypes.isNullOrEmpty() && selectedTaskType?.isTranslate() != true) {
196198
InputBar(
197199
sessionId,
198200
selectedTaskType,
@@ -202,6 +204,24 @@ fun AssistantScreen(
202204
},
203205
snackbarHost = {
204206
SnackbarHost(snackbarHostState)
207+
},
208+
floatingActionButton = {
209+
if (selectedTaskType?.isTranslate() == true && !isTranslationTask) {
210+
FloatingActionButton(onClick = {
211+
viewModel.updateTranslationTaskState(true)
212+
viewModel.updateScreenState(AssistantScreenState.Translation(null))
213+
}, content = {
214+
Row(
215+
verticalAlignment = Alignment.CenterVertically,
216+
modifier = Modifier.padding(16.dp)
217+
) {
218+
Icon(
219+
painter = painterResource(R.drawable.ic_plus),
220+
contentDescription = "translate button"
221+
)
222+
}
223+
})
224+
}
205225
}
206226
) { paddingValues ->
207227
when (screenState) {
@@ -317,12 +337,7 @@ private fun InputBar(sessionId: Long?, selectedTaskType: TaskTypeData?, viewMode
317337
viewModel.createConversation(text)
318338
}
319339
} else {
320-
if (taskType.isTranslate()) {
321-
// TODO:
322-
// viewModel.translate()
323-
} else {
324-
viewModel.createTask(input = text, taskType = taskType)
325-
}
340+
viewModel.createTask(input = text, taskType = taskType)
326341
}
327342

328343
scope.launch {

app/src/main/java/com/nextcloud/client/assistant/AssistantViewModel.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ class AssistantViewModel(
6363
private val _snackbarMessageId = MutableStateFlow<Int?>(null)
6464
val snackbarMessageId: StateFlow<Int?> = _snackbarMessageId
6565

66+
private val _isTranslationTask = MutableStateFlow<Boolean>(false)
67+
val isTranslationTask: StateFlow<Boolean> = _isTranslationTask
68+
6669
private val _selectedTask = MutableStateFlow<Task?>(null)
6770
val selectedTask: StateFlow<Task?> = _selectedTask
6871

@@ -186,7 +189,13 @@ class AssistantViewModel(
186189
isChat && chats.isEmpty() -> AssistantScreenState.emptyChatList()
187190
isChat -> AssistantScreenState.ChatContent
188191
!isChat && (tasks == null || tasks.isEmpty()) -> AssistantScreenState.emptyTaskList()
189-
else -> AssistantScreenState.TaskContent
192+
else -> {
193+
if (!_isTranslationTask.value) {
194+
AssistantScreenState.TaskContent
195+
} else {
196+
_screenState.value
197+
}
198+
}
190199
}
191200
}.collect { newState ->
192201
_screenState.value = newState
@@ -399,6 +408,12 @@ class AssistantViewModel(
399408
}
400409
}
401410

411+
fun updateTranslationTaskState(value: Boolean) {
412+
_isTranslationTask.update {
413+
value
414+
}
415+
}
416+
402417
private fun removeTaskFromList(id: Long) {
403418
_filteredTaskList.update { currentList ->
404419
currentList?.filter { it.id != id }

app/src/main/java/com/nextcloud/client/assistant/task/TaskView.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ fun TaskView(task: Task, viewModel: AssistantViewModel, capability: OCCapability
6464
viewModel.selectTask(task)
6565

6666
if (task.type == "core:text2text:translate") {
67+
viewModel.updateTranslationTaskState(true)
6768
viewModel.updateScreenState(AssistantScreenState.Translation(task))
6869
} else {
6970
showTaskDetailBottomSheet = true

app/src/main/java/com/nextcloud/client/assistant/translate/TranslationScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,15 @@ fun TranslationScreen(selectedTaskType: TaskTypeData?, viewModel: AssistantViewM
6868
}
6969

7070
BackHandler {
71+
viewModel.updateTranslationTaskState(false)
7172
viewModel.selectTask(null)
7273
viewModel.updateScreenState(AssistantScreenState.TaskContent)
7374
}
7475

7576
// task is unselected
7677
DisposableEffect(Unit) {
7778
onDispose {
79+
viewModel.updateTranslationTaskState(false)
7880
viewModel.selectTask(null)
7981
}
8082
}
@@ -86,7 +88,6 @@ fun TranslationScreen(selectedTaskType: TaskTypeData?, viewModel: AssistantViewM
8688
.padding(top = 32.dp),
8789
floatingActionButton = {
8890
FloatingActionButton(onClick = {
89-
// TODO:
9091
val originLang = sourceState.language
9192
val targetLang = targetState.language
9293
if (originLang != null && targetLang != null) {

0 commit comments

Comments
 (0)