@@ -61,19 +61,22 @@ import com.nextcloud.client.assistant.conversation.ConversationViewModel
6161import com.nextcloud.client.assistant.conversation.repository.MockConversationRemoteRepository
6262import com.nextcloud.client.assistant.extensions.getInputTitle
6363import com.nextcloud.client.assistant.model.AssistantScreenState
64+ import com.nextcloud.client.assistant.model.AssistantPage
6465import com.nextcloud.client.assistant.model.ScreenOverlayState
6566import com.nextcloud.client.assistant.repository.local.MockAssistantLocalRepository
6667import com.nextcloud.client.assistant.repository.remote.MockAssistantRemoteRepository
6768import com.nextcloud.client.assistant.task.TaskView
6869import com.nextcloud.client.assistant.taskTypes.TaskTypesRow
6970import com.nextcloud.ui.composeActivity.ComposeActivity
71+ import com.nextcloud.ui.composeActivity.ComposeViewModel
7072import com.nextcloud.ui.composeComponents.alertDialog.SimpleAlertDialog
7173import com.nextcloud.ui.composeComponents.bottomSheet.MoreActionsBottomSheet
7274import com.nextcloud.utils.extensions.getChat
7375import com.owncloud.android.R
7476import com.owncloud.android.lib.resources.assistant.v2.model.Task
7577import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData
7678import com.owncloud.android.lib.resources.status.OCCapability
79+ import com.owncloud.android.utils.ClipboardUtil
7780import kotlinx.coroutines.delay
7881import kotlinx.coroutines.launch
7982
@@ -84,11 +87,13 @@ private const val PULL_TO_REFRESH_DELAY = 1500L
8487@OptIn(ExperimentalMaterial3Api ::class )
8588@Composable
8689fun AssistantScreen (
90+ composeViewModel : ComposeViewModel ,
8791 viewModel : AssistantViewModel ,
8892 conversationViewModel : ConversationViewModel ,
8993 capability : OCCapability ,
9094 activity : Activity
9195) {
96+ val selectedText by composeViewModel.selectedText.collectAsState()
9297 val sessionId by viewModel.sessionId.collectAsState()
9398 val messageId by viewModel.snackbarMessageId.collectAsState()
9499 val screenOverlayState by viewModel.screenOverlayState.collectAsState()
@@ -99,7 +104,8 @@ fun AssistantScreen(
99104 val scope = rememberCoroutineScope()
100105 val pullRefreshState = rememberPullToRefreshState()
101106 val snackbarHostState = remember { SnackbarHostState () }
102- val pagerState = rememberPagerState(initialPage = 1 , pageCount = { 2 })
107+ val pagerState =
108+ rememberPagerState(initialPage = AssistantPage .Content .id, pageCount = { AssistantPage .entries.size })
103109
104110 LaunchedEffect (messageId) {
105111 messageId?.let {
@@ -108,6 +114,20 @@ fun AssistantScreen(
108114 }
109115 }
110116
117+ 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+ }
125+
126+ ClipboardUtil .copyToClipboard(activity, selectedText, false )
127+
128+ snackbarHostState.showSnackbar(activity.getString(R .string.assistant_screen_text_selected))
129+ }
130+
111131 LaunchedEffect (sessionId) {
112132 viewModel.startPolling(sessionId)
113133
@@ -127,22 +147,22 @@ fun AssistantScreen(
127147 userScrollEnabled = taskTypes.getChat() != null
128148 ) { page ->
129149 when (page) {
130- 0 -> {
150+ AssistantPage . Conversation .id -> {
131151 ConversationScreen (viewModel = conversationViewModel, close = {
132152 scope.launch {
133- pagerState.scrollToPage(1 )
153+ pagerState.scrollToPage(AssistantPage . Content .id )
134154 }
135155 }, openChat = { newSessionId ->
136156 viewModel.initSessionId(newSessionId)
137157 taskTypes.getChat()?.let { chatTaskType ->
138158 viewModel.selectTaskType(chatTaskType)
139159 }
140160 scope.launch {
141- pagerState.scrollToPage(1 )
161+ pagerState.scrollToPage(AssistantPage . Content .id )
142162 }
143163 })
144164 }
145- 1 -> {
165+ AssistantPage . Content .id -> {
146166 Scaffold (
147167 modifier = Modifier .pullToRefresh(
148168 false ,
@@ -166,7 +186,7 @@ fun AssistantScreen(
166186 viewModel.selectTaskType(task)
167187 }, navigateToConversationList = {
168188 scope.launch {
169- pagerState.scrollToPage(0 )
189+ pagerState.scrollToPage(AssistantPage . Conversation .id )
170190 }
171191 })
172192 }
@@ -413,6 +433,7 @@ private fun AssistantScreenPreview() {
413433 MaterialTheme (
414434 content = {
415435 AssistantScreen (
436+ composeViewModel = ComposeViewModel (),
416437 conversationViewModel = getMockConversationViewModel(),
417438 viewModel = getMockAssistantViewModel(false ),
418439 activity = ComposeActivity (),
@@ -431,6 +452,7 @@ private fun AssistantEmptyScreenPreview() {
431452 MaterialTheme (
432453 content = {
433454 AssistantScreen (
455+ composeViewModel = ComposeViewModel (),
434456 conversationViewModel = getMockConversationViewModel(),
435457 viewModel = getMockAssistantViewModel(true ),
436458 activity = ComposeActivity (),
0 commit comments