Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit ed7a477d authored by Sunik Kupfer's avatar Sunik Kupfer Committed by GitHub
Browse files

[UI] Use "(optional)" in labels to indicate optional textfields (#1571)



* Clarify optional fields in UI

Signed-off-by: default avatarSunik Kupfer <kupfer@bitfire.at>

* Add icons to add webdav mount screen

Signed-off-by: default avatarSunik Kupfer <kupfer@bitfire.at>

* Add title to group mount point address and name

Signed-off-by: default avatarSunik Kupfer <kupfer@bitfire.at>

* Use assistant composable

Signed-off-by: default avatarSunik Kupfer <kupfer@bitfire.at>

---------

Signed-off-by: default avatarSunik Kupfer <kupfer@bitfire.at>
Co-authored-by: default avatarRicki Hirner <hirner@bitfire.at>
parent b0609faf
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -150,7 +150,6 @@ fun CreateAddressBookScreen(
                        value = description,
                        onValueChange = onSetDescription,
                        label = { Text(stringResource(R.string.create_collection_description_optional)) },
                        supportingText = { Text(stringResource(R.string.create_collection_optional)) },
                        singleLine = true,
                        enabled = !isCreating,
                        keyboardOptions = KeyboardOptions(
+0 −2
Original line number Diff line number Diff line
@@ -228,7 +228,6 @@ fun CreateCalendarScreen(
                        value = description,
                        onValueChange = onSetDescription,
                        label = { Text(stringResource(R.string.create_collection_description_optional)) },
                        supportingText = { Text(stringResource(R.string.create_collection_optional)) },
                        singleLine = true,
                        keyboardOptions = KeyboardOptions(
                            imeAction = ImeAction.Done
@@ -251,7 +250,6 @@ fun CreateCalendarScreen(
                            label = { Text(stringResource(R.string.create_calendar_time_zone_optional)) },
                            value = timeZone ?: stringResource(R.string.create_calendar_time_zone_none),
                            onValueChange = { /* read-only */ },
                            supportingText = { Text(stringResource(R.string.create_collection_optional)) },
                            trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) },
                            readOnly = true,
                            modifier = Modifier
+0 −6
Original line number Diff line number Diff line
@@ -179,12 +179,6 @@ fun AdvancedLoginScreen(
                chosenAlias = certAlias,
                onAliasChosen = onSetCertAlias
            )

            Text(
                stringResource(R.string.optional_label),
                style = MaterialTheme.typography.bodyMedium,
                modifier = Modifier.padding(top = 16.dp)
            )
        }
    }

+30 −25
Original line number Diff line number Diff line
@@ -5,18 +5,17 @@
package at.bitfire.davdroid.ui.webdav

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.Help
import androidx.compose.material.icons.filled.AccountCircle
import androidx.compose.material.icons.filled.Cloud
import androidx.compose.material3.Button
import androidx.compose.material.icons.filled.Password
import androidx.compose.material.icons.filled.Sell
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -42,8 +41,8 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import at.bitfire.davdroid.R
import at.bitfire.davdroid.ui.AppTheme
import at.bitfire.davdroid.ui.composable.Assistant
import at.bitfire.davdroid.ui.composable.PasswordTextField
import at.bitfire.davdroid.ui.composable.ProgressBar
import at.bitfire.davdroid.ui.composable.SelectClientCertificateCard

@Composable
@@ -136,21 +135,27 @@ fun AddWebDavMountScreen(
        },
        snackbarHost = { SnackbarHost(snackbarHostState) }
    ) { paddingValues ->
        Assistant(
            nextLabel = stringResource(R.string.webdav_add_mount_add),
            nextEnabled = canContinue && !isLoading,
            isLoading = isLoading,
            onNext = onAddMount
        ) {
            Column(
                modifier = Modifier
                .fillMaxSize()
                    .padding(paddingValues)
                .verticalScroll(rememberScrollState())
                    .padding(8.dp)
            ) {
            if (isLoading)
                ProgressBar(modifier = Modifier.fillMaxWidth())
                val focusRequester = remember { FocusRequester() }

            Column(
                Text(
                    text = stringResource(R.string.webdav_add_mount_mountpoint_displayname),
                    style = MaterialTheme.typography.headlineSmall,
                    modifier = Modifier
                        .fillMaxWidth()
                    .padding(8.dp)
            ) {
                val focusRequester = remember { FocusRequester() }
                        .padding(bottom = 8.dp)
                )

                OutlinedTextField(
                    label = { Text(stringResource(R.string.webdav_add_mount_url)) },
                    leadingIcon = { Icon(Icons.Default.Cloud, contentDescription = null) },
@@ -177,6 +182,9 @@ fun AddWebDavMountScreen(
                    value = displayName,
                    onValueChange = onSetDisplayName,
                    singleLine = true,
                    leadingIcon = {
                        Icon(Icons.Default.Sell, null)
                    },
                    readOnly = isLoading,
                    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
                    modifier = Modifier
@@ -192,10 +200,13 @@ fun AddWebDavMountScreen(
                        .padding(bottom = 8.dp)
                )
                OutlinedTextField(
                    label = { Text(stringResource(R.string.login_user_name)) },
                    label = { Text(stringResource(R.string.login_user_name_optional)) },
                    value = username,
                    onValueChange = onSetUsername,
                    singleLine = true,
                    leadingIcon = {
                        Icon(Icons.Default.AccountCircle, null)
                    },
                    readOnly = isLoading,
                    keyboardOptions = KeyboardOptions(
                        imeAction = ImeAction.Next,
@@ -208,8 +219,11 @@ fun AddWebDavMountScreen(
                PasswordTextField(
                    password = password,
                    onPasswordChange = onSetPassword,
                    labelText = stringResource(R.string.login_password),
                    labelText = stringResource(R.string.login_password_optional),
                    readOnly = isLoading,
                    leadingIcon = {
                        Icon(Icons.Default.Password, null)
                    },
                    keyboardOptions = KeyboardOptions(
                        imeAction = ImeAction.Done
                    ),
@@ -229,15 +243,6 @@ fun AddWebDavMountScreen(
                        .fillMaxWidth()
                        .padding(bottom = 8.dp)
                )

                Button(
                    enabled = canContinue && !isLoading,
                    onClick = { onAddMount() }
                ) {
                    Text(
                        text = stringResource(R.string.webdav_add_mount_add)
                    )
                }
            }
        }
    }
+9 −8
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@
    <string name="field_required">This field is required</string>
    <string name="help">Help</string>
    <string name="navigate_up">Navigate up</string>
    <string name="optional_label">* optional</string>
    <string name="options_menu">Options menu</string>
    <string name="share">Share</string>
    <string name="sync_started">Synchronization started/enqueued</string>
@@ -282,10 +281,10 @@
    <string name="login_password">Password</string>
    <string name="login_password_hide">Hide password</string>
    <string name="login_password_show">Show password</string>
    <string name="login_password_optional">Password*</string>
    <string name="login_password_optional">Password (optional)</string>
    <string name="login_type_url">Login with URL and user name</string>
    <string name="login_user_name">User name</string>
    <string name="login_user_name_optional">User name*</string>
    <string name="login_user_name_optional">User name (optional)</string>
    <string name="login_base_url">Base URL</string>
    <string name="login_base_url_info"><![CDATA[The base URL will be checked directly, but <a href="%s">services are also discovered</a> using DNS records and well-known URLs.]]></string>
    <string name="login_select_certificate">Select certificate</string>
@@ -299,7 +298,7 @@
    <string name="login_account_not_added">Account could not be added</string>
    <string name="login_finish">Finish</string>
    <string name="login_type_advanced">Advanced login</string>
    <string name="login_no_client_certificate_optional">No client certificate*</string>
    <string name="login_no_client_certificate_optional">No client certificate (optional)</string>
    <string name="login_client_certificate_selected">Client certificate: %s</string>
    <string name="login_no_certificate_found">No certificate found</string>
    <string name="login_install_certificate">Install certificate</string>
@@ -415,7 +414,7 @@
    <string name="create_addressbook">Create address book</string>
    <string name="create_addressbook_maybe_not_supported">Address book creation over CardDAV may not be supported by the server.</string>
    <string name="create_calendar">Create calendar</string>
    <string name="create_calendar_time_zone_optional">Default time zone*</string>
    <string name="create_calendar_time_zone_optional">Default time zone (optional)</string>
    <string name="create_calendar_time_zone_none"></string>
    <string name="create_calendar_type">Possible calendar entries</string>
    <string name="create_calendar_type_vevent">Events</string>
@@ -425,9 +424,8 @@
    <string name="create_collection_color">Color</string>
    <string name="create_collection_display_name">Title</string>
    <string name="create_collection_home_set">Storage location</string>
    <string name="create_collection_description_optional">Description*</string>
    <string name="create_collection_description_optional">Description (optional)</string>
    <string name="create_collection_create">Create</string>
    <string name="create_collection_optional">* optional</string>

    <!-- CollectionScreen -->
    <string name="collection_datatype_contacts">contacts</string>
@@ -498,9 +496,12 @@
    <string name="webdav_add_mount_display_name">Display name</string>
    <string name="webdav_add_mount_url">WebDAV URL</string>
    <string name="webdav_add_mount_url_invalid">Invalid URL</string>
    <string name="webdav_add_mount_authentication">Authentication (optional)</string>
    <string name="webdav_add_mount_mountpoint_displayname">Mount point and display name</string>
    <string name="webdav_add_mount_authentication">Authentication</string>
    <string name="webdav_add_mount_username">User name</string>
    <string name="webdav_add_mount_password">Password</string>
    <string name="webdav_add_mount_username_optional">User name (optional)</string>
    <string name="webdav_add_mount_password_optional">Password (optional)</string>
    <string name="webdav_add_mount_add">Add mount</string>
    <string name="webdav_add_mount_no_support">No WebDAV service at this URL</string>
    <string name="webdav_remove_mount_title">Remove mount point</string>