Skip to content

Commit ec99703

Browse files
Merge pull request #50 from a2i2/stuart/copy-results
Add "Share" option and make text selectable/copyable [CON-2662]
2 parents fff8df0 + 7d887d0 commit ec99703

File tree

4 files changed

+64
-18
lines changed

4 files changed

+64
-18
lines changed

EEFRT Demo Android/app/src/main/java/ai/a2i2/conductor/effrtdemoandroid/ui/EefrtTrialDetailView.kt

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,23 @@ import androidx.compose.foundation.Image
88
import androidx.compose.foundation.layout.Column
99
import androidx.compose.foundation.layout.padding
1010
import androidx.compose.foundation.rememberScrollState
11+
import androidx.compose.foundation.text.selection.SelectionContainer
1112
import androidx.compose.foundation.verticalScroll
13+
import androidx.compose.material.icons.Icons
14+
import androidx.compose.material.icons.filled.Share
1215
import androidx.compose.material3.ExperimentalMaterial3Api
16+
import androidx.compose.material3.Icon
1317
import androidx.compose.material3.IconButton
1418
import androidx.compose.material3.Scaffold
1519
import androidx.compose.material3.Text
1620
import androidx.compose.material3.TopAppBar
1721
import androidx.compose.runtime.Composable
1822
import androidx.compose.ui.Modifier
23+
import androidx.compose.ui.platform.LocalClipboardManager
24+
import androidx.compose.ui.platform.LocalContext
25+
import android.content.Intent
1926
import androidx.compose.ui.res.painterResource
27+
import androidx.compose.ui.text.AnnotatedString
2028
import androidx.compose.ui.unit.dp
2129

2230
@OptIn(ExperimentalMaterial3Api::class)
@@ -42,16 +50,26 @@ fun EefrtTrialDetailView(
4250
TopAppBar(
4351
title = { Text("") },
4452
navigationIcon = {
45-
IconButton(
46-
onClick = {
47-
dismiss(onBack)
48-
}
49-
) {
53+
IconButton(onClick = { dismiss(onBack) }) {
5054
Image(
5155
painter = painterResource(id = R.drawable.arrow_left),
5256
contentDescription = "Back",
5357
)
5458
}
59+
},
60+
actions = {
61+
val context = LocalContext.current
62+
IconButton(onClick = {
63+
val shareText = formatPracticeTrialString()
64+
val shareIntent = Intent().apply {
65+
action = Intent.ACTION_SEND
66+
putExtra(Intent.EXTRA_TEXT, shareText)
67+
type = "text/plain"
68+
}
69+
context.startActivity(Intent.createChooser(shareIntent, "Share via"))
70+
}) {
71+
Icon(imageVector = Icons.Filled.Share, contentDescription = "Share")
72+
}
5573
}
5674
)
5775
},
@@ -60,13 +78,15 @@ fun EefrtTrialDetailView(
6078
modifier = Modifier
6179
.verticalScroll(scrollViewState)
6280
.padding(paddingValues)
63-
.padding(vertical = 16f.dp)
81+
.padding(vertical = 16.dp)
6482
) {
65-
Text(
66-
text = formatPracticeTrialString(),
67-
modifier = Modifier
68-
.padding(horizontal = 16f.dp)
69-
)
83+
SelectionContainer {
84+
Text(
85+
text = formatPracticeTrialString(),
86+
modifier = Modifier
87+
.padding(horizontal = 16.dp)
88+
)
89+
}
7090
}
7191
}
7292
)

EEFRT Demo Android/app/src/main/java/ai/a2i2/conductor/effrtdemoandroid/ui/EventLogsView.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.compose.runtime.remember
3030
import androidx.compose.ui.Modifier
3131
import androidx.compose.ui.graphics.Color
3232
import androidx.compose.ui.res.painterResource
33+
import androidx.compose.ui.text.font.FontWeight
3334
import androidx.compose.ui.unit.dp
3435

3536
@OptIn(ExperimentalMaterial3Api::class)
@@ -89,7 +90,8 @@ fun EventLogsView(
8990
.padding(horizontal = 4.dp)
9091
) {
9192
Text(
92-
"Practice Attempts",
93+
"Practice Rounds",
94+
fontWeight = FontWeight.Bold,
9395
modifier = Modifier.padding(16.dp)
9496
)
9597

@@ -124,7 +126,8 @@ fun EventLogsView(
124126
Spacer(Modifier.padding(vertical = 20f.dp))
125127

126128
Text(
127-
"Actual Attempts",
129+
"Main Rounds",
130+
fontWeight = FontWeight.Bold,
128131
modifier = Modifier.padding(16.dp)
129132
)
130133

EEFRT Demo iOS/EEFRT Demo/EventLogsView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ struct EventLogsView: View {
1212

1313
var body: some View {
1414
List {
15-
Section("Practice attempts") {
15+
Section("Practice Rounds") {
1616
ForEach(practiceTaskResults) { result in
1717
VStack {
1818
NavigationLink(
@@ -33,7 +33,7 @@ struct EventLogsView: View {
3333
.onDelete(perform: deletePracticeTaskResult)
3434
}
3535

36-
Section("Actual attempts") {
36+
Section("Main Rounds") {
3737
ForEach(taskResults) { result in
3838
VStack {
3939
NavigationLink(
Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,48 @@
11
import SwiftData
22
import SwiftUI
3+
import UIKit
34

45
struct TaskResultDetailsView: View {
6+
@State private var isSharePresented = false
57
private var jsonString: String
6-
8+
79
init(jsonString: String) {
810
let formattedString = jsonString
911
.replacingOccurrences(of: ",", with: ",\n")
1012
.replacingOccurrences(of: "{", with: "")
1113
.replacingOccurrences(of: "}", with: "")
12-
14+
1315
self.jsonString = formattedString
1416
}
15-
17+
1618
var body: some View {
1719
ScrollView {
1820
VStack(alignment: .leading) {
1921
Text(jsonString)
2022
.multilineTextAlignment(.leading)
23+
.textSelection(.enabled)
2124
.frame(width: UIScreen.main.bounds.width)
2225
}
2326
}
27+
.toolbar {
28+
ToolbarItem(placement: .navigationBarTrailing) {
29+
Button(action: {
30+
isSharePresented = true
31+
}) {
32+
Image(systemName: "square.and.arrow.up")
33+
}
34+
}
35+
}
36+
.sheet(isPresented: $isSharePresented) {
37+
ActivityView(activityItems: [jsonString])
38+
}
39+
}
40+
}
41+
42+
struct ActivityView: UIViewControllerRepresentable {
43+
let activityItems: [Any]
44+
func makeUIViewController(context: Context) -> UIActivityViewController {
45+
UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
2446
}
47+
func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {}
2548
}

0 commit comments

Comments
 (0)