Skip to content

Commit 747223e

Browse files
committed
add translation model
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 2f6944d commit 747223e

4 files changed

Lines changed: 41 additions & 25 deletions

File tree

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import com.nextcloud.client.assistant.repository.local.MockAssistantLocalReposit
6565
import com.nextcloud.client.assistant.repository.remote.MockAssistantRemoteRepository
6666
import com.nextcloud.client.assistant.task.TaskView
6767
import com.nextcloud.client.assistant.taskTypes.TaskTypesRow
68+
import com.nextcloud.client.assistant.translate.TranslationScreen
6869
import com.nextcloud.ui.composeActivity.ComposeActivity
6970
import com.nextcloud.ui.composeActivity.ComposeViewModel
7071
import com.nextcloud.ui.composeComponents.alertDialog.SimpleAlertDialog
@@ -229,6 +230,10 @@ fun AssistantScreen(
229230
)
230231
}
231232

233+
AssistantScreenState.Translation -> {
234+
TranslationScreen(selectedTaskType, viewModel,selectedText ?: "")
235+
}
236+
232237
else -> EmptyContent(
233238
paddingValues,
234239
iconId = R.drawable.spinner_inner,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class AssistantViewModel(
4444
private const val POLLING_INTERVAL_MS = 15_000L
4545
}
4646

47-
private val _inputBarText = MutableStateFlow<String>("")
47+
private val _inputBarText = MutableStateFlow("")
4848
val inputBarText: StateFlow<String> = _inputBarText
4949

5050
private val _screenState = MutableStateFlow<AssistantScreenState?>(null)

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

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,26 @@ import androidx.compose.ui.graphics.Color
3737
import androidx.compose.ui.res.painterResource
3838
import androidx.compose.ui.res.stringResource
3939
import androidx.compose.ui.unit.dp
40+
import com.nextcloud.client.assistant.AssistantViewModel
4041
import com.owncloud.android.R
42+
import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData
43+
import com.owncloud.android.lib.resources.assistant.v2.model.TranslationLanguage
44+
import com.owncloud.android.lib.resources.assistant.v2.model.TranslationLanguages
45+
import com.owncloud.android.lib.resources.assistant.v2.model.toTranslationLanguages
4146

4247
@OptIn(ExperimentalMaterial3Api::class)
4348
@Composable
44-
fun TranslationScreen(textToTranslate: String) {
49+
fun TranslationScreen(task: TaskTypeData?, viewModel: AssistantViewModel, textToTranslate: String) {
4550
var originText by remember { mutableStateOf(textToTranslate) }
46-
var originLanguage by remember { mutableStateOf("English") }
51+
val languages = task?.toTranslationLanguages() ?: TranslationLanguages(listOf(), listOf())
52+
53+
var originLanguage by remember { mutableStateOf(languages.originLanguages.first()) }
4754
var showOriginDropdownMenu by remember { mutableStateOf(false) }
4855

4956
var targetText by remember { mutableStateOf("") }
50-
var targetLanguage by remember { mutableStateOf("Spanish") }
57+
var targetLanguage by remember { mutableStateOf(languages.targetLanguages.first()) }
5158
var showTargetDropdownMenu by remember { mutableStateOf(false) }
5259

53-
val languages = listOf("English", "Spanish", "French", "German", "Turkish", "Japanese")
54-
5560
Scaffold(
5661
modifier = Modifier
5762
.fillMaxSize()
@@ -72,19 +77,22 @@ fun TranslationScreen(textToTranslate: String) {
7277
item {
7378
LanguageSelector(
7479
title = originLanguage,
75-
languages = languages,
80+
languages = languages.originLanguages,
7681
titleId = R.string.translation_screen_label_from,
7782
expanded = showOriginDropdownMenu,
7883
expand = {
7984
showOriginDropdownMenu = it
80-
}, onLanguageSelect = {
81-
originLanguage = it
85+
}, onLanguageSelect = { newLanguage ->
86+
originLanguage = newLanguage
8287
}
8388
)
8489

85-
TranslationTextField(titleId = R.string.translation_screen_hint_source, originText, onValueChange = {
86-
originText = it
87-
})
90+
TranslationTextField(
91+
titleId = R.string.translation_screen_hint_source,
92+
originText,
93+
onValueChange = { updatedText ->
94+
originText = updatedText
95+
})
8896
}
8997

9098
item {
@@ -98,19 +106,22 @@ fun TranslationScreen(textToTranslate: String) {
98106
item {
99107
LanguageSelector(
100108
title = targetLanguage,
101-
languages = languages,
109+
languages = languages.targetLanguages,
102110
titleId = R.string.translation_screen_label_to,
103111
expanded = showTargetDropdownMenu,
104112
expand = {
105113
showTargetDropdownMenu = it
106-
}, onLanguageSelect = {
107-
targetLanguage = it
114+
}, onLanguageSelect = { newLanguage ->
115+
targetLanguage = newLanguage
108116
}
109117
)
110118

111-
TranslationTextField(titleId = R.string.translation_screen_hint_target, targetText, onValueChange = {
112-
targetText = it
113-
})
119+
TranslationTextField(
120+
titleId = R.string.translation_screen_hint_target,
121+
targetText,
122+
onValueChange = { updatedText ->
123+
targetText = updatedText
124+
})
114125
}
115126
}
116127
}
@@ -145,12 +156,12 @@ private fun TranslationTextField(titleId: Int, value: String, onValueChange: (St
145156

146157
@Composable
147158
private fun LanguageSelector(
148-
title: String,
149-
languages: List<String>,
159+
title: TranslationLanguage,
160+
languages: List<TranslationLanguage>,
150161
titleId: Int,
151162
expanded: Boolean,
152163
expand: (Boolean) -> Unit,
153-
onLanguageSelect: (String) -> Unit
164+
onLanguageSelect: (TranslationLanguage) -> Unit
154165
) {
155166
Row(
156167
modifier = Modifier
@@ -160,15 +171,15 @@ private fun LanguageSelector(
160171
})
161172
) {
162173
Text(
163-
text = stringResource(titleId, title),
174+
text = stringResource(titleId),
164175
style = MaterialTheme.typography.labelLarge,
165176
color = MaterialTheme.colorScheme.primary,
166177
)
167178

168179
Spacer(modifier = Modifier.width(8.dp))
169180

170181
Text(
171-
text = title,
182+
text = title.name,
172183
style = MaterialTheme.typography.labelLarge,
173184
)
174185

@@ -178,7 +189,7 @@ private fun LanguageSelector(
178189
) {
179190
languages.forEach { language ->
180191
DropdownMenuItem(
181-
text = { Text(language) },
192+
text = { Text(language.name) },
182193
onClick = {
183194
expand(false)
184195
onLanguageSelect(language)

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<string name="assistant_task_detail_screen_output_button_title">Output</string>
7373

7474
<!-- Translation Screen -->
75-
<string name="translation_screen_label_from">Source Language: </string>
75+
<string name="translation_screen_label_from">Source language: </string>
7676
<string name="translation_screen_label_to">Translate to: </string>
7777
<string name="translation_screen_hint_source">Enter text to translate…</string>
7878
<string name="translation_screen_hint_target">Translation will appear here…</string>

0 commit comments

Comments
 (0)