Skip to content

Commit 77ffc2b

Browse files
committed
copy selected text to input bar
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 61bf192 commit 77ffc2b

2 files changed

Lines changed: 25 additions & 18 deletions

File tree

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

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,8 @@ import androidx.compose.runtime.DisposableEffect
4141
import androidx.compose.runtime.LaunchedEffect
4242
import androidx.compose.runtime.collectAsState
4343
import androidx.compose.runtime.getValue
44-
import androidx.compose.runtime.mutableStateOf
4544
import androidx.compose.runtime.remember
4645
import androidx.compose.runtime.rememberCoroutineScope
47-
import androidx.compose.runtime.setValue
4846
import androidx.compose.ui.Alignment
4947
import androidx.compose.ui.Modifier
5048
import androidx.compose.ui.graphics.ColorFilter
@@ -60,8 +58,8 @@ import com.nextcloud.client.assistant.conversation.ConversationScreen
6058
import com.nextcloud.client.assistant.conversation.ConversationViewModel
6159
import com.nextcloud.client.assistant.conversation.repository.MockConversationRemoteRepository
6260
import com.nextcloud.client.assistant.extensions.getInputTitle
63-
import com.nextcloud.client.assistant.model.AssistantScreenState
6461
import com.nextcloud.client.assistant.model.AssistantPage
62+
import com.nextcloud.client.assistant.model.AssistantScreenState
6563
import com.nextcloud.client.assistant.model.ScreenOverlayState
6664
import com.nextcloud.client.assistant.repository.local.MockAssistantLocalRepository
6765
import com.nextcloud.client.assistant.repository.remote.MockAssistantRemoteRepository
@@ -76,7 +74,6 @@ import com.owncloud.android.R
7674
import com.owncloud.android.lib.resources.assistant.v2.model.Task
7775
import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData
7876
import com.owncloud.android.lib.resources.status.OCCapability
79-
import com.owncloud.android.utils.ClipboardUtil
8077
import kotlinx.coroutines.delay
8178
import kotlinx.coroutines.launch
8279

@@ -115,17 +112,18 @@ fun AssistantScreen(
115112
}
116113

117114
LaunchedEffect(selectedText) {
118-
if (selectedText.isNullOrEmpty()) {
119-
return@LaunchedEffect
120-
}
121-
122-
if (pagerState.currentPage == AssistantPage.Conversation.id) {
123-
pagerState.scrollToPage(AssistantPage.Content.id)
124-
}
115+
selectedText?.let {
116+
if (it.isBlank()) {
117+
return@LaunchedEffect
118+
}
125119

126-
ClipboardUtil.copyToClipboard(activity, selectedText, false)
120+
if (pagerState.currentPage == AssistantPage.Conversation.id) {
121+
pagerState.scrollToPage(AssistantPage.Content.id)
122+
}
127123

128-
snackbarHostState.showSnackbar(activity.getString(R.string.assistant_screen_text_selected))
124+
viewModel.updateInputBarText(it)
125+
snackbarHostState.showSnackbar(activity.getString(R.string.assistant_screen_text_selected))
126+
}
129127
}
130128

131129
LaunchedEffect(sessionId) {
@@ -193,7 +191,7 @@ fun AssistantScreen(
193191
},
194192
bottomBar = {
195193
if (!taskTypes.isNullOrEmpty()) {
196-
ChatInputBar(
194+
InputBar(
197195
sessionId,
198196
selectedTaskType,
199197
viewModel
@@ -253,9 +251,9 @@ fun AssistantScreen(
253251

254252
@Suppress("LongMethod")
255253
@Composable
256-
private fun ChatInputBar(sessionId: Long?, selectedTaskType: TaskTypeData?, viewModel: AssistantViewModel) {
254+
private fun InputBar(sessionId: Long?, selectedTaskType: TaskTypeData?, viewModel: AssistantViewModel) {
257255
val scope = rememberCoroutineScope()
258-
var text by remember { mutableStateOf("") }
256+
val text by viewModel.inputBarText.collectAsState()
259257

260258
Surface(
261259
tonalElevation = 3.dp,
@@ -284,7 +282,7 @@ private fun ChatInputBar(sessionId: Long?, selectedTaskType: TaskTypeData?, view
284282
) {
285283
OutlinedTextField(
286284
value = text,
287-
onValueChange = { text = it },
285+
onValueChange = { viewModel.updateInputBarText(it) },
288286
modifier = Modifier
289287
.weight(1f)
290288
.padding(end = 8.dp),
@@ -311,7 +309,7 @@ private fun ChatInputBar(sessionId: Long?, selectedTaskType: TaskTypeData?, view
311309

312310
scope.launch {
313311
delay(CHAT_INPUT_DELAY)
314-
text = ""
312+
viewModel.updateInputBarText("")
315313
}
316314
}
317315
) {

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class AssistantViewModel(
4444
private const val POLLING_INTERVAL_MS = 15_000L
4545
}
4646

47+
private val _inputBarText = MutableStateFlow<String>("")
48+
val inputBarText: StateFlow<String> = _inputBarText
49+
4750
private val _screenState = MutableStateFlow<AssistantScreenState?>(null)
4851
val screenState: StateFlow<AssistantScreenState?> = _screenState
4952

@@ -314,6 +317,12 @@ class AssistantViewModel(
314317
}
315318
}
316319

320+
fun updateInputBarText(value: String) {
321+
_inputBarText.update {
322+
value
323+
}
324+
}
325+
317326
private fun removeTaskFromList(id: Long) {
318327
_filteredTaskList.update { currentList ->
319328
currentList?.filter { it.id != id }

0 commit comments

Comments
 (0)