Skip to content

Commit

Permalink
added hyperlink ammendments
Browse files Browse the repository at this point in the history
  • Loading branch information
aman-alfresco committed Feb 27, 2024
1 parent 8931ade commit 7f8540f
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.alfresco.content.process.ui.components

import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PlaylistAdd
import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier

@Composable
fun FloatingActionButton() {
ExtendedFloatingActionButton(
onClick = {

},
containerColor = MaterialTheme.colorScheme.primary,
icon = { Icon(Icons.Filled.PlaylistAdd, "Extended floating action button.") },
text = { Text(text = "Actions") },
modifier = Modifier.navigationBarsPadding()
)

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.alfresco.content.process.ui.components
import ComposeTopBar
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.material3.FabPosition
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
Expand All @@ -21,6 +22,7 @@ fun FormScreen(navController: NavController) {
// This will get or create a ViewModel scoped to the Activity.
val viewModel: FormViewModel = mavericksActivityViewModel()
val state by viewModel.collectAsState()
val has2Coutcomes = state.formFields

Scaffold(
topBar = { ComposeTopBar() },
Expand All @@ -41,5 +43,7 @@ fun FormScreen(navController: NavController) {
FormDetailScreen(state, viewModel)
}
},
floatingActionButton = { FloatingActionButton() },
floatingActionButtonPosition = FabPosition.End
)
}
Original file line number Diff line number Diff line change
@@ -1,73 +1,52 @@
package com.alfresco.content.process.ui.components

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.ClickableText
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.foundation.clickable
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Link
import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.UrlAnnotation
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import com.alfresco.content.data.payloads.FieldsData
import com.alfresco.content.process.R

@OptIn(ExperimentalTextApi::class)
@Composable
fun HyperLinkField(
fieldsData: FieldsData = FieldsData(),
) {
val uriHandler = LocalUriHandler.current

val hyperlinkData = buildAnnotatedString {
append(fieldsData.displayText)
addStyle(
style = SpanStyle(
fontSize = 16.sp,
color = MaterialTheme.colorScheme.primary,
),
start = 0,
end = fieldsData.displayText?.length ?: 0,
)
addUrlAnnotation(
UrlAnnotation(fieldsData.hyperlinkUrl ?: ""),
start = 0,
end = fieldsData.displayText?.length ?: 0,
val keyboardOptions = KeyboardOptions.Default.copy(
imeAction = ImeAction.Next,
keyboardType = KeyboardType.Text,
)


val leadingIcon: @Composable () -> Unit = {
Icon(
imageVector = Icons.Default.Link,
contentDescription = stringResource(R.string.accessibility_link_icon),
tint = trailingIconColor(),
)
}

Column(

InputFieldWithLeading(
modifier = Modifier
.fillMaxWidth()
.padding(start = 16.dp, end = 16.dp, top = 16.dp, bottom = 0.dp),
horizontalAlignment = Alignment.Start,
) {
Text(
text = fieldsData.name,
style = TextStyle(
fontSize = 16.sp,
color = MaterialTheme.colorScheme.onSurface,
),
)
ClickableText(
text = hyperlinkData,
style = TextStyle(
color = MaterialTheme.colorScheme.onSurface,
),
onClick = {
hyperlinkData
.getUrlAnnotations(it, it)
.firstOrNull()?.let { annotation ->
uriHandler.openUri(annotation.item.url)
}
.inputField()
.clickable {
uriHandler.openUri(fieldsData.hyperlinkUrl ?: "")
},
)
}
maxLines = 1,
textFieldValue = fieldsData.displayText,
fieldsData = fieldsData,
keyboardOptions = keyboardOptions,
leadingIcon = leadingIcon,
isEnabled = false,
)

}
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ fun InputFieldWithLeading(
leadingIcon: @Composable () -> Unit = {},
isError: Boolean = false,
errorMessage: String = "",
isEnabled: Boolean = true,
) {
var selectionState by remember { mutableIntStateOf(0) }
// State to keep track of focus state
Expand Down Expand Up @@ -163,6 +164,7 @@ fun InputFieldWithLeading(

OutlinedTextField(
colors = colors,
enabled = isEnabled,
value = textFieldValue ?: "", // Initial value of the text field
onValueChange = { newValue ->
val newText = if (fieldsData.maxLength > 0) {
Expand Down
1 change: 1 addition & 0 deletions process-app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<string name="error_min_length">Enter at least %1$d characters</string>
<string name="accessibility_clear_text">Clear Text</string>
<string name="accessibility_date_icon">Date Icon</string>
<string name="accessibility_link_icon">Link Icon</string>
<string name="error_min_value">Can\'t be less than %1$d</string>
<string name="error_max_value">Can\'t be greater than %1$d</string>
<string name="error_invalid_format">Use a different number format</string>
Expand Down

0 comments on commit 7f8540f

Please sign in to comment.