Merge pull request #1392 from vector-im/feature/bma/iterateOnIcons

Iterate on icons
This commit is contained in:
Benoit Marty 2023-09-20 23:20:28 +02:00 committed by GitHub
commit c15e47d571
669 changed files with 3959 additions and 1595 deletions

View file

@ -30,7 +30,6 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.text.ClickableText import androidx.compose.foundation.text.ClickableText
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Poll import androidx.compose.material.icons.filled.Poll
import androidx.compose.material.icons.rounded.Check
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -56,6 +55,7 @@ import io.element.android.libraries.designsystem.theme.components.ButtonSize
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.theme.temporaryColorBgSpecial import io.element.android.libraries.designsystem.theme.temporaryColorBgSpecial
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.designsystem.utils.LogCompositions import io.element.android.libraries.designsystem.utils.LogCompositions
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -147,7 +147,7 @@ private fun CheckIcon(modifier: Modifier = Modifier) {
.size(20.dp) .size(20.dp)
.background(color = MaterialTheme.colorScheme.background, shape = CircleShape) .background(color = MaterialTheme.colorScheme.background, shape = CircleShape)
.padding(2.dp), .padding(2.dp),
imageVector = Icons.Rounded.Check, resourceId = CommonDrawables.ic_compound_check,
contentDescription = null, contentDescription = null,
tint = ElementTheme.colors.textActionAccent, tint = ElementTheme.colors.textActionAccent,
) )

View file

@ -24,8 +24,6 @@ import android.webkit.WebView
import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -37,6 +35,7 @@ import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
typealias RequestPermissionCallback = (Array<String>) -> Unit typealias RequestPermissionCallback = (Array<String>) -> Unit
@ -58,7 +57,7 @@ internal fun CallScreenView(
title = { Text(stringResource(R.string.element_call)) }, title = { Text(stringResource(R.string.element_call)) },
navigationIcon = { navigationIcon = {
BackButton( BackButton(
imageVector = Icons.Default.Close, resourceId = CommonDrawables.ic_compound_close,
onClick = onClose onClick = onClose
) )
} }

View file

@ -57,7 +57,7 @@ fun RoomPrivacyOption(
) { ) {
Icon( Icon(
modifier = Modifier.padding(horizontal = 8.dp), modifier = Modifier.padding(horizontal = 8.dp),
imageVector = roomPrivacyItem.icon, resourceId = roomPrivacyItem.icon,
contentDescription = "", contentDescription = "",
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
) )

View file

@ -16,19 +16,17 @@
package io.element.android.features.createroom.impl.configureroom package io.element.android.features.createroom.impl.configureroom
import androidx.compose.material.icons.Icons import androidx.annotation.DrawableRes
import androidx.compose.material.icons.outlined.Lock
import androidx.compose.material.icons.outlined.Public
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.createroom.impl.R import io.element.android.features.createroom.impl.R
import io.element.android.libraries.designsystem.utils.CommonDrawables
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
data class RoomPrivacyItem( data class RoomPrivacyItem(
val privacy: RoomPrivacy, val privacy: RoomPrivacy,
val icon: ImageVector, @DrawableRes val icon: Int,
val title: String, val title: String,
val description: String, val description: String,
) )
@ -40,13 +38,13 @@ fun roomPrivacyItems(): ImmutableList<RoomPrivacyItem> {
when (it) { when (it) {
RoomPrivacy.Private -> RoomPrivacyItem( RoomPrivacy.Private -> RoomPrivacyItem(
privacy = it, privacy = it,
icon = Icons.Outlined.Lock, icon = CommonDrawables.ic_compound_lock,
title = stringResource(R.string.screen_create_room_private_option_title), title = stringResource(R.string.screen_create_room_private_option_title),
description = stringResource(R.string.screen_create_room_private_option_description), description = stringResource(R.string.screen_create_room_private_option_description),
) )
RoomPrivacy.Public -> RoomPrivacyItem( RoomPrivacy.Public -> RoomPrivacyItem(
privacy = it, privacy = it,
icon = Icons.Outlined.Public, icon = CommonDrawables.ic_compound_public,
title = stringResource(R.string.screen_create_room_public_option_title), title = stringResource(R.string.screen_create_room_public_option_title),
description = stringResource(R.string.screen_create_room_public_option_description), description = stringResource(R.string.screen_create_room_public_option_description),
) )

View file

@ -27,8 +27,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -41,17 +39,17 @@ import androidx.compose.ui.unit.dp
import io.element.android.features.createroom.impl.R import io.element.android.features.createroom.impl.R
import io.element.android.features.createroom.impl.components.UserListView import io.element.android.features.createroom.impl.components.UserListView
import io.element.android.libraries.architecture.Async import io.element.android.libraries.architecture.Async
import io.element.android.libraries.designsystem.VectorIcons
import io.element.android.libraries.designsystem.components.ProgressDialog import io.element.android.libraries.designsystem.components.ProgressDialog
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.dialogs.RetryDialog import io.element.android.libraries.designsystem.components.dialogs.RetryDialog
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -141,13 +139,10 @@ fun CreateRoomRootViewTopBar(
) )
}, },
navigationIcon = { navigationIcon = {
IconButton(onClick = onClosePressed) { BackButton(
Icon( resourceId = CommonDrawables.ic_compound_close,
imageVector = Icons.Default.Close, onClick = onClosePressed,
contentDescription = stringResource(id = CommonStrings.action_close), )
tint = MaterialTheme.colorScheme.primary,
)
}
} }
) )
} }
@ -161,12 +156,12 @@ fun CreateRoomActionButtonsList(
) { ) {
Column(modifier = modifier) { Column(modifier = modifier) {
CreateRoomActionButton( CreateRoomActionButton(
iconRes = VectorIcons.Groups, iconRes = CommonDrawables.ic_groups,
text = stringResource(id = R.string.screen_create_room_action_create_room), text = stringResource(id = R.string.screen_create_room_action_create_room),
onClick = onNewRoomClicked, onClick = onNewRoomClicked,
) )
CreateRoomActionButton( CreateRoomActionButton(
iconRes = VectorIcons.Share, iconRes = CommonDrawables.ic_compound_share_android,
text = stringResource(id = CommonStrings.action_invite_friends_to_app, state.applicationName), text = stringResource(id = CommonStrings.action_invite_friends_to_app, state.applicationName),
onClick = onInvitePeopleClicked, onClick = onInvitePeopleClicked,
) )

View file

@ -29,8 +29,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Notifications
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -50,6 +48,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Surface
import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -80,7 +79,7 @@ private fun NotificationsOptInHeader(
modifier = modifier, modifier = modifier,
title = stringResource(R.string.screen_notification_optin_title), title = stringResource(R.string.screen_notification_optin_title),
subTitle = stringResource(R.string.screen_notification_optin_subtitle), subTitle = stringResource(R.string.screen_notification_optin_subtitle),
iconImageVector = Icons.Default.Notifications, iconResourceId = CommonDrawables.ic_compound_notifications_solid,
) )
} }

View file

@ -40,9 +40,9 @@ import io.element.android.features.location.api.internal.centerBottomEdge
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import timber.log.Timber import timber.log.Timber
import io.element.android.libraries.designsystem.R as DesignSystemR
/** /**
* Shows a static map image downloaded via a third party service's static maps API. * Shows a static map image downloaded via a third party service's static maps API.
@ -102,7 +102,7 @@ fun StaticMapView(
contentScale = ContentScale.Fit, contentScale = ContentScale.Fit,
) )
Icon( Icon(
resourceId = DesignSystemR.drawable.pin, resourceId = CommonDrawables.pin,
contentDescription = null, contentDescription = null,
tint = Color.Unspecified, tint = Color.Unspecified,
modifier = Modifier.centerBottomEdge(this), modifier = Modifier.centerBottomEdge(this),

View file

@ -60,13 +60,13 @@ import io.element.android.libraries.designsystem.theme.components.FloatingAction
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.maplibre.compose.CameraMode import io.element.android.libraries.maplibre.compose.CameraMode
import io.element.android.libraries.maplibre.compose.CameraMoveStartedReason import io.element.android.libraries.maplibre.compose.CameraMoveStartedReason
import io.element.android.libraries.maplibre.compose.MapboxMap import io.element.android.libraries.maplibre.compose.MapboxMap
import io.element.android.libraries.maplibre.compose.rememberCameraPositionState import io.element.android.libraries.maplibre.compose.rememberCameraPositionState
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
import io.element.android.libraries.designsystem.R as DesignSystemR
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class) @OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
@Composable @Composable
@ -203,7 +203,7 @@ fun SendLocationView(
), ),
) )
Icon( Icon(
resourceId = DesignSystemR.drawable.pin, resourceId = CommonDrawables.pin,
contentDescription = null, contentDescription = null,
tint = Color.Unspecified, tint = Color.Unspecified,
modifier = Modifier.centerBottomEdge(this), modifier = Modifier.centerBottomEdge(this),

View file

@ -25,7 +25,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.LocationSearching import androidx.compose.material.icons.filled.LocationSearching
import androidx.compose.material.icons.filled.MyLocation import androidx.compose.material.icons.filled.MyLocation
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -51,6 +50,7 @@ import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.maplibre.compose.CameraMode import io.element.android.libraries.maplibre.compose.CameraMode
import io.element.android.libraries.maplibre.compose.CameraMoveStartedReason import io.element.android.libraries.maplibre.compose.CameraMoveStartedReason
import io.element.android.libraries.maplibre.compose.IconAnchor import io.element.android.libraries.maplibre.compose.IconAnchor
@ -62,7 +62,6 @@ import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.theme.compound.generated.TypographyTokens import io.element.android.libraries.theme.compound.generated.TypographyTokens
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
import kotlinx.collections.immutable.toImmutableMap import kotlinx.collections.immutable.toImmutableMap
import io.element.android.libraries.designsystem.R as DesignSystemR
@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3Api::class) @OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3Api::class)
@Composable @Composable
@ -125,7 +124,10 @@ fun ShowLocationView(
}, },
actions = { actions = {
IconButton(onClick = { state.eventSink(ShowLocationEvents.Share) }) { IconButton(onClick = { state.eventSink(ShowLocationEvents.Share) }) {
Icon(imageVector = Icons.Outlined.Share, contentDescription = stringResource(CommonStrings.action_share)) Icon(
resourceId = CommonDrawables.ic_compound_share_android,
contentDescription = stringResource(CommonStrings.action_share),
)
} }
} }
) )
@ -163,7 +165,7 @@ fun ShowLocationView(
MapboxMap( MapboxMap(
styleUri = rememberTileStyleUrl(), styleUri = rememberTileStyleUrl(),
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
images = mapOf(PIN_ID to DesignSystemR.drawable.pin).toImmutableMap(), images = mapOf(PIN_ID to CommonDrawables.pin).toImmutableMap(),
cameraPositionState = cameraPositionState, cameraPositionState = cameraPositionState,
uiSettings = MapDefaults.uiSettings, uiSettings = MapDefaults.uiSettings,
symbolManagerSettings = MapDefaults.symbolManagerSettings, symbolManagerSettings = MapDefaults.symbolManagerSettings,

View file

@ -23,8 +23,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Search
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -40,6 +38,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
/** /**
@ -75,7 +74,7 @@ fun AccountProviderView(
} else { } else {
RoundedIconAtom( RoundedIconAtom(
size = RoundedIconAtomSize.Medium, size = RoundedIconAtomSize.Medium,
imageVector = Icons.Filled.Search, resourceId = CommonDrawables.ic_compound_search,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
) )
} }

View file

@ -31,9 +31,6 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AccountCircle import androidx.compose.material.icons.filled.AccountCircle
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
@ -72,6 +69,7 @@ import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.theme.components.autofill import io.element.android.libraries.designsystem.theme.components.autofill
import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag import io.element.android.libraries.testtags.testTag
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@ -220,7 +218,7 @@ internal fun LoginForm(
IconButton(onClick = { IconButton(onClick = {
loginFieldState = "" loginFieldState = ""
}) { }) {
Icon(imageVector = Icons.Filled.Close, contentDescription = stringResource(CommonStrings.action_clear)) Icon(resourceId = CommonDrawables.ic_compound_close, contentDescription = stringResource(CommonStrings.action_clear))
} }
} }
} else null, } else null,
@ -253,12 +251,12 @@ internal fun LoginForm(
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(), visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(),
trailingIcon = { trailingIcon = {
val image = val image =
if (passwordVisible) Icons.Filled.Visibility else Icons.Filled.VisibilityOff if (passwordVisible) CommonDrawables.ic_compound_visibility_on else CommonDrawables.ic_compound_visibility_off
val description = val description =
if (passwordVisible) stringResource(CommonStrings.a11y_hide_password) else stringResource(CommonStrings.a11y_show_password) if (passwordVisible) stringResource(CommonStrings.a11y_hide_password) else stringResource(CommonStrings.a11y_show_password)
IconButton(onClick = { passwordVisible = !passwordVisible }) { IconButton(onClick = { passwordVisible = !passwordVisible }) {
Icon(imageVector = image, description) Icon(resourceId = image, description)
} }
}, },
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(

View file

@ -32,9 +32,6 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Search
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
@ -69,6 +66,7 @@ import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.OutlinedTextField import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag import io.element.android.libraries.testtags.testTag
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -105,7 +103,7 @@ fun SearchAccountProviderView(
item { item {
IconTitleSubtitleMolecule( IconTitleSubtitleMolecule(
modifier = Modifier.padding(top = 16.dp, bottom = 40.dp, start = 16.dp, end = 16.dp), modifier = Modifier.padding(top = 16.dp, bottom = 40.dp, start = 16.dp, end = 16.dp),
iconImageVector = Icons.Filled.Search, iconResourceId = CommonDrawables.ic_compound_search,
title = stringResource(id = R.string.screen_account_provider_form_title), title = stringResource(id = R.string.screen_account_provider_form_title),
subTitle = stringResource(id = R.string.screen_account_provider_form_subtitle), subTitle = stringResource(id = R.string.screen_account_provider_form_subtitle),
) )
@ -141,7 +139,7 @@ fun SearchAccountProviderView(
eventSink(SearchAccountProviderEvents.UserInput("")) eventSink(SearchAccountProviderEvents.UserInput(""))
}) { }) {
Icon( Icon(
imageVector = Icons.Filled.Close, resourceId = CommonDrawables.ic_compound_close,
contentDescription = stringResource(CommonStrings.action_clear) contentDescription = stringResource(CommonStrings.action_clear)
) )
} }

View file

@ -16,8 +16,6 @@
package io.element.android.features.logout.api package io.element.android.features.logout.api
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Logout
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -29,6 +27,7 @@ import io.element.android.libraries.designsystem.components.dialogs.Confirmation
import io.element.android.libraries.designsystem.components.preferences.PreferenceText import io.element.android.libraries.designsystem.components.preferences.PreferenceText
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.utils.CommonDrawables
@Composable @Composable
fun LogoutPreferenceView( fun LogoutPreferenceView(
@ -80,7 +79,7 @@ fun LogoutPreferenceContent(
) { ) {
PreferenceText( PreferenceText(
title = stringResource(id = R.string.screen_signout_preference_item), title = stringResource(id = R.string.screen_signout_preference_item),
icon = Icons.Filled.Logout, iconResourceId = CommonDrawables.ic_compound_leave,
onClick = onClick onClick = onClick
) )
} }

View file

@ -36,8 +36,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.ListItem import androidx.compose.material.ListItem
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AddReaction
import androidx.compose.material.ripple.rememberRipple import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@ -78,6 +76,7 @@ import io.element.android.libraries.designsystem.theme.components.HorizontalDivi
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet
import io.element.android.libraries.designsystem.theme.components.hide import io.element.android.libraries.designsystem.theme.components.hide
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.ui.components.AttachmentThumbnail import io.element.android.libraries.matrix.ui.components.AttachmentThumbnail
import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailInfo import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailInfo
import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailType import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailType
@ -361,7 +360,7 @@ internal fun EmojiReactionsRow(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.AddReaction, resourceId = CommonDrawables.ic_september_add_reaction,
contentDescription = "Emojis", contentDescription = "Emojis",
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier modifier = Modifier

View file

@ -19,7 +19,7 @@ package io.element.android.features.messages.impl.actionlist.model
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import io.element.android.libraries.designsystem.VectorIcons import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@Immutable @Immutable
@ -28,13 +28,13 @@ sealed class TimelineItemAction(
@DrawableRes val icon: Int, @DrawableRes val icon: Int,
val destructive: Boolean = false val destructive: Boolean = false
) { ) {
data object Forward : TimelineItemAction(CommonStrings.action_forward, VectorIcons.Forward) data object Forward : TimelineItemAction(CommonStrings.action_forward, CommonDrawables.ic_september_forward)
data object Copy : TimelineItemAction(CommonStrings.action_copy, VectorIcons.Copy) data object Copy : TimelineItemAction(CommonStrings.action_copy, CommonDrawables.ic_september_copy)
data object Redact : TimelineItemAction(CommonStrings.action_remove, VectorIcons.Delete, destructive = true) data object Redact : TimelineItemAction(CommonStrings.action_remove, CommonDrawables.ic_compound_delete, destructive = true)
data object Reply : TimelineItemAction(CommonStrings.action_reply, VectorIcons.Reply) data object Reply : TimelineItemAction(CommonStrings.action_reply, CommonDrawables.ic_september_reply)
data object ReplyInThread : TimelineItemAction(CommonStrings.action_reply_in_thread, VectorIcons.Reply) data object ReplyInThread : TimelineItemAction(CommonStrings.action_reply_in_thread, CommonDrawables.ic_september_reply)
data object Edit : TimelineItemAction(CommonStrings.action_edit, VectorIcons.Edit) data object Edit : TimelineItemAction(CommonStrings.action_edit, CommonDrawables.ic_september_edit_outline)
data object ViewSource : TimelineItemAction(CommonStrings.action_view_source, VectorIcons.DeveloperMode) data object ViewSource : TimelineItemAction(CommonStrings.action_view_source, CommonDrawables.ic_september_view_source)
data object ReportContent : TimelineItemAction(CommonStrings.action_report_content, VectorIcons.ReportContent, destructive = true) data object ReportContent : TimelineItemAction(CommonStrings.action_report_content, CommonDrawables.ic_compound_chat_problem, destructive = true)
data object EndPoll : TimelineItemAction(CommonStrings.action_end_poll, VectorIcons.PollEnd) data object EndPoll : TimelineItemAction(CommonStrings.action_end_poll, CommonDrawables.ic_poll_end)
} }

View file

@ -31,7 +31,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Attachment
import androidx.compose.material.icons.outlined.GraphicEq import androidx.compose.material.icons.outlined.GraphicEq
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -64,9 +63,9 @@ import io.element.android.libraries.core.mimetype.MimeTypes
import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeAudio import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeAudio
import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeImage import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeImage
import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo
import io.element.android.libraries.designsystem.R
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.designsystem.utils.OnLifecycleEvent import io.element.android.libraries.designsystem.utils.OnLifecycleEvent
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import me.saket.telephoto.zoomable.ZoomSpec import me.saket.telephoto.zoomable.ZoomSpec
@ -124,7 +123,7 @@ private fun MediaImageView(
) { ) {
if (LocalInspectionMode.current) { if (LocalInspectionMode.current) {
Image( Image(
painter = painterResource(id = R.drawable.sample_background), painter = painterResource(id = CommonDrawables.sample_background),
modifier = modifier.fillMaxSize(), modifier = modifier.fillMaxSize(),
contentDescription = null, contentDescription = null,
) )
@ -230,7 +229,8 @@ fun MediaFileView(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Icon( Icon(
imageVector = if (isAudio) Icons.Outlined.GraphicEq else Icons.Outlined.Attachment, imageVector = if (isAudio) Icons.Outlined.GraphicEq else null,
resourceId = if (isAudio) null else CommonDrawables.ic_september_attachment,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.background, tint = MaterialTheme.colorScheme.background,
modifier = Modifier modifier = Modifier

View file

@ -29,9 +29,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Download
import androidx.compose.material.icons.filled.OpenInNew import androidx.compose.material.icons.filled.OpenInNew
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -61,6 +59,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.designsystem.utils.SnackbarHost import io.element.android.libraries.designsystem.utils.SnackbarHost
import io.element.android.libraries.designsystem.utils.rememberSnackbarHostState import io.element.android.libraries.designsystem.utils.rememberSnackbarHostState
import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.media.MediaSource
@ -176,7 +175,10 @@ private fun MediaViewerTopBar(
eventSink(MediaViewerEvents.OpenWith) eventSink(MediaViewerEvents.OpenWith)
}, },
) { ) {
Icon(imageVector = Icons.Default.OpenInNew, contentDescription = stringResource(id = CommonStrings.action_open_with)) Icon(
imageVector = Icons.Default.OpenInNew,
contentDescription = stringResource(id = CommonStrings.action_open_with)
)
} }
IconButton( IconButton(
enabled = actionsEnabled, enabled = actionsEnabled,
@ -184,7 +186,10 @@ private fun MediaViewerTopBar(
eventSink(MediaViewerEvents.SaveOnDisk) eventSink(MediaViewerEvents.SaveOnDisk)
}, },
) { ) {
Icon(imageVector = Icons.Default.Download, contentDescription = stringResource(id = CommonStrings.action_save)) Icon(
resourceId = CommonDrawables.ic_compound_download,
contentDescription = stringResource(id = CommonStrings.action_save),
)
} }
IconButton( IconButton(
enabled = actionsEnabled, enabled = actionsEnabled,
@ -192,7 +197,10 @@ private fun MediaViewerTopBar(
eventSink(MediaViewerEvents.Share) eventSink(MediaViewerEvents.Share)
}, },
) { ) {
Icon(imageVector = Icons.Default.Share, contentDescription = stringResource(id = CommonStrings.action_share)) Icon(
resourceId = CommonDrawables.ic_compound_share_android,
contentDescription = stringResource(id = CommonStrings.action_share)
)
} }
} }
) )

View file

@ -22,14 +22,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.ListItem import androidx.compose.material.ListItem
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AttachFile
import androidx.compose.material.icons.filled.BarChart
import androidx.compose.material.icons.filled.Collections
import androidx.compose.material.icons.filled.FormatColorText
import androidx.compose.material.icons.filled.LocationOn
import androidx.compose.material.icons.filled.PhotoCamera
import androidx.compose.material.icons.filled.Videocam
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -49,6 +41,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -115,22 +108,22 @@ internal fun AttachmentSourcePickerMenu(
) { ) {
ListItem( ListItem(
modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.PickAttachmentSource.FromGallery) }, modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.PickAttachmentSource.FromGallery) },
icon = { Icon(Icons.Default.Collections, null) }, icon = { Icon(CommonDrawables.ic_september_photo_video_library, null) },
text = { Text(stringResource(R.string.screen_room_attachment_source_gallery)) }, text = { Text(stringResource(R.string.screen_room_attachment_source_gallery)) },
) )
ListItem( ListItem(
modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.PickAttachmentSource.FromFiles) }, modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.PickAttachmentSource.FromFiles) },
icon = { Icon(Icons.Default.AttachFile, null) }, icon = { Icon(CommonDrawables.ic_september_attachment, null) },
text = { Text(stringResource(R.string.screen_room_attachment_source_files)) }, text = { Text(stringResource(R.string.screen_room_attachment_source_files)) },
) )
ListItem( ListItem(
modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.PickAttachmentSource.PhotoFromCamera) }, modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.PickAttachmentSource.PhotoFromCamera) },
icon = { Icon(Icons.Default.PhotoCamera, null) }, icon = { Icon(CommonDrawables.ic_september_take_photo_camera, null) },
text = { Text(stringResource(R.string.screen_room_attachment_source_camera_photo)) }, text = { Text(stringResource(R.string.screen_room_attachment_source_camera_photo)) },
) )
ListItem( ListItem(
modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.PickAttachmentSource.VideoFromCamera) }, modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.PickAttachmentSource.VideoFromCamera) },
icon = { Icon(Icons.Default.Videocam, null) }, icon = { Icon(CommonDrawables.ic_september_video_call, null) },
text = { Text(stringResource(R.string.screen_room_attachment_source_camera_video)) }, text = { Text(stringResource(R.string.screen_room_attachment_source_camera_video)) },
) )
if (state.canShareLocation) { if (state.canShareLocation) {
@ -139,7 +132,7 @@ internal fun AttachmentSourcePickerMenu(
state.eventSink(MessageComposerEvents.PickAttachmentSource.Location) state.eventSink(MessageComposerEvents.PickAttachmentSource.Location)
onSendLocationClicked() onSendLocationClicked()
}, },
icon = { Icon(Icons.Default.LocationOn, null) }, icon = { Icon(CommonDrawables.ic_september_location, null) },
text = { Text(stringResource(R.string.screen_room_attachment_source_location)) }, text = { Text(stringResource(R.string.screen_room_attachment_source_location)) },
) )
} }
@ -149,14 +142,14 @@ internal fun AttachmentSourcePickerMenu(
state.eventSink(MessageComposerEvents.PickAttachmentSource.Poll) state.eventSink(MessageComposerEvents.PickAttachmentSource.Poll)
onCreatePollClicked() onCreatePollClicked()
}, },
icon = { Icon(Icons.Default.BarChart, null) }, icon = { Icon(CommonDrawables.ic_compound_polls, null) },
text = { Text(stringResource(R.string.screen_room_attachment_source_poll)) }, text = { Text(stringResource(R.string.screen_room_attachment_source_poll)) },
) )
} }
if (enableTextFormatting) { if (enableTextFormatting) {
ListItem( ListItem(
modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.ToggleTextFormatting(enabled = true)) }, modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.ToggleTextFormatting(enabled = true)) },
icon = { Icon(Icons.Default.FormatColorText, null) }, icon = { Icon(CommonDrawables.ic_september_text_formatting, null) },
text = { Text(stringResource(R.string.screen_room_attachment_text_formatting)) }, text = { Text(stringResource(R.string.screen_room_attachment_text_formatting)) },
) )
} }

View file

@ -36,8 +36,6 @@ import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowDownward
import androidx.compose.material3.FloatingActionButtonDefaults import androidx.compose.material3.FloatingActionButtonDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -49,6 +47,7 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.rotate
import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
@ -68,6 +67,7 @@ import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.FloatingActionButton import io.element.android.libraries.designsystem.theme.components.FloatingActionButton
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@ -315,8 +315,8 @@ private fun JumpToBottomButton(
contentColor = ElementTheme.colors.iconSecondary contentColor = ElementTheme.colors.iconSecondary
) { ) {
Icon( Icon(
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp).rotate(90f),
imageVector = Icons.Filled.ArrowDownward, resourceId = CommonDrawables.ic_compound_arrow_right,
contentDescription = "", contentDescription = "",
) )
} }

View file

@ -16,6 +16,7 @@
package io.element.android.features.messages.impl.timeline.components package io.element.android.features.messages.impl.timeline.components
import androidx.annotation.DrawableRes
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
@ -29,15 +30,12 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AddReaction
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -52,6 +50,7 @@ import io.element.android.libraries.designsystem.text.toDp
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Surface
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
@ -96,7 +95,7 @@ fun MessagesReactionButton(
color = buttonColor color = buttonColor
) { ) {
when (content) { when (content) {
is MessagesReactionsButtonContent.Icon -> IconContent(imageVector = content.imageVector) is MessagesReactionsButtonContent.Icon -> IconContent(resourceId = content.resourceId)
is MessagesReactionsButtonContent.Text -> TextContent(text = content.text) is MessagesReactionsButtonContent.Text -> TextContent(text = content.text)
is MessagesReactionsButtonContent.Reaction -> ReactionContent(reaction = content.reaction) is MessagesReactionsButtonContent.Reaction -> ReactionContent(reaction = content.reaction)
} }
@ -105,7 +104,7 @@ fun MessagesReactionButton(
sealed class MessagesReactionsButtonContent { sealed class MessagesReactionsButtonContent {
data class Text(val text: String) : MessagesReactionsButtonContent() data class Text(val text: String) : MessagesReactionsButtonContent()
data class Icon(val imageVector: ImageVector) : MessagesReactionsButtonContent() data class Icon(@DrawableRes val resourceId: Int) : MessagesReactionsButtonContent()
data class Reaction(val reaction: AggregatedReaction) : MessagesReactionsButtonContent() data class Reaction(val reaction: AggregatedReaction) : MessagesReactionsButtonContent()
@ -129,10 +128,10 @@ private fun TextContent(
@Composable @Composable
private fun IconContent( private fun IconContent(
imageVector: ImageVector, @DrawableRes resourceId: Int,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) = Icon( ) = Icon(
imageVector = imageVector, resourceId = resourceId,
contentDescription = stringResource(id = R.string.screen_room_timeline_add_reaction), contentDescription = stringResource(id = R.string.screen_room_timeline_add_reaction),
tint = ElementTheme.materialColors.secondary, tint = ElementTheme.materialColors.secondary,
modifier = modifier modifier = modifier
@ -179,7 +178,7 @@ internal fun MessagesReactionButtonPreview(@PreviewParameter(AggregatedReactionP
@Composable @Composable
internal fun MessagesAddReactionButtonPreview() = ElementPreview { internal fun MessagesAddReactionButtonPreview() = ElementPreview {
MessagesReactionButton( MessagesReactionButton(
content = MessagesReactionsButtonContent.Icon(Icons.Outlined.AddReaction), content = MessagesReactionsButtonContent.Icon(CommonDrawables.ic_september_add_reaction),
onClick = {}, onClick = {},
onLongClick = {} onLongClick = {}
) )

View file

@ -25,10 +25,10 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.VectorIcons
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.utils.CommonDrawables
/** /**
* A swipe indicator that appears when swiping to reply to a message. * A swipe indicator that appears when swiping to reply to a message.
@ -49,7 +49,7 @@ fun RowScope.ReplySwipeIndicator(
alpha = swipeProgress() alpha = swipeProgress()
}, },
contentDescription = null, contentDescription = null,
resourceId = VectorIcons.Reply, resourceId = CommonDrawables.ic_september_reply,
) )
} }

View file

@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Error
import androidx.compose.material.ripple.rememberRipple import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -42,6 +40,7 @@ import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -90,7 +89,12 @@ fun TimelineEventTimestampView(
) )
if (hasMessageSendingFailed && tint != null) { if (hasMessageSendingFailed && tint != null) {
Spacer(modifier = Modifier.width(2.dp)) Spacer(modifier = Modifier.width(2.dp))
Icon(imageVector = Icons.Default.Error, contentDescription = "Error sending message", tint = tint, modifier = Modifier.size(15.dp, 18.dp)) Icon(
resourceId = CommonDrawables.ic_compound_error,
contentDescription = "Error sending message",
tint = tint,
modifier = Modifier.size(15.dp, 18.dp),
)
} }
} }
} }

View file

@ -76,7 +76,6 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemImageContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemImageContent
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemPollContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemPollContent
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent
import io.element.android.libraries.designsystem.VectorIcons
import io.element.android.libraries.designsystem.colors.AvatarColorsProvider import io.element.android.libraries.designsystem.colors.AvatarColorsProvider
import io.element.android.libraries.designsystem.components.EqualWidthColumn import io.element.android.libraries.designsystem.components.EqualWidthColumn
import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.Avatar
@ -89,6 +88,7 @@ import io.element.android.libraries.designsystem.swipe.rememberSwipeableActionsS
import io.element.android.libraries.designsystem.text.toPx import io.element.android.libraries.designsystem.text.toPx
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
@ -403,7 +403,11 @@ private fun MessageEventBubbleContent(
horizontalArrangement = spacedBy(4.dp, Alignment.Start), horizontalArrangement = spacedBy(4.dp, Alignment.Start),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon(resourceId = VectorIcons.ThreadDecoration, contentDescription = null, tint = ElementTheme.colors.iconSecondary) Icon(
resourceId = CommonDrawables.ic_thread_decoration,
contentDescription = null,
tint = ElementTheme.colors.iconSecondary,
)
Text( Text(
text = stringResource(CommonStrings.common_thread), text = stringResource(CommonStrings.common_thread),
style = ElementTheme.typography.fontBodyXsRegular, style = ElementTheme.typography.fontBodyXsRegular,

View file

@ -16,8 +16,6 @@
package io.element.android.features.messages.impl.timeline.components package io.element.android.features.messages.impl.timeline.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AddReaction
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.MeasureResult import androidx.compose.ui.layout.MeasureResult
@ -30,6 +28,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.features.messages.impl.R import io.element.android.features.messages.impl.R
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.utils.CommonDrawables
/** /**
* A flow layout for reactions that will show a collapse/expand button when the layout wraps over a defined number of rows. * A flow layout for reactions that will show a collapse/expand button when the layout wraps over a defined number of rows.
@ -197,7 +196,7 @@ internal fun TimelineItemReactionsLayoutPreview() = ElementPreview {
}, },
addMoreButton = { addMoreButton = {
MessagesReactionButton( MessagesReactionButton(
content = MessagesReactionsButtonContent.Icon(Icons.Outlined.AddReaction), content = MessagesReactionsButtonContent.Icon(CommonDrawables.ic_september_add_reaction),
onClick = {}, onClick = {},
onLongClick = {} onLongClick = {}
) )

View file

@ -16,8 +16,6 @@
package io.element.android.features.messages.impl.timeline.components package io.element.android.features.messages.impl.timeline.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AddReaction
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -35,6 +33,7 @@ import io.element.android.features.messages.impl.timeline.model.AggregatedReacti
import io.element.android.features.messages.impl.timeline.model.TimelineItemReactions import io.element.android.features.messages.impl.timeline.model.TimelineItemReactions
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.utils.CommonDrawables
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
@Composable @Composable
@ -96,7 +95,7 @@ private fun TimelineItemReactionsView(
}, },
addMoreButton = { addMoreButton = {
MessagesReactionButton( MessagesReactionButton(
content = MessagesReactionsButtonContent.Icon(Icons.Outlined.AddReaction), content = MessagesReactionsButtonContent.Icon(CommonDrawables.ic_september_add_reaction),
onClick = onMoreReactionsClick, onClick = onMoreReactionsClick,
onLongClick = {} onLongClick = {}
) )

View file

@ -16,14 +16,13 @@
package io.element.android.features.messages.impl.timeline.components.event package io.element.android.features.messages.impl.timeline.components.event
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Warning
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -36,7 +35,7 @@ fun TimelineItemEncryptedView(
TimelineItemInformativeView( TimelineItemInformativeView(
text = stringResource(id = CommonStrings.common_decryption_error), text = stringResource(id = CommonStrings.common_decryption_error),
iconDescription = stringResource(id = CommonStrings.dialog_title_warning), iconDescription = stringResource(id = CommonStrings.dialog_title_warning),
icon = Icons.Default.Warning, iconResourceId = CommonDrawables.ic_september_decryption_error,
extraPadding = extraPadding, extraPadding = extraPadding,
modifier = modifier modifier = modifier
) )

View file

@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Attachment
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -41,6 +39,7 @@ import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
@ -60,7 +59,7 @@ fun TimelineItemFileView(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Attachment, resourceId = CommonDrawables.ic_september_attachment,
contentDescription = "OpenFile", contentDescription = "OpenFile",
tint = ElementTheme.materialColors.primary, tint = ElementTheme.materialColors.primary,
modifier = Modifier modifier = Modifier

View file

@ -16,17 +16,15 @@
package io.element.android.features.messages.impl.timeline.components.event package io.element.android.features.messages.impl.timeline.components.event
import androidx.annotation.DrawableRes
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
@ -34,13 +32,14 @@ import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
fun TimelineItemInformativeView( fun TimelineItemInformativeView(
text: String, text: String,
iconDescription: String, iconDescription: String,
icon: ImageVector, @DrawableRes iconResourceId: Int,
extraPadding: ExtraPadding, extraPadding: ExtraPadding,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
@ -49,7 +48,7 @@ fun TimelineItemInformativeView(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = icon, resourceId = iconResourceId,
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
contentDescription = iconDescription, contentDescription = iconDescription,
modifier = Modifier.size(16.dp) modifier = Modifier.size(16.dp)
@ -70,7 +69,7 @@ internal fun TimelineItemInformativeViewPreview() = ElementPreview {
TimelineItemInformativeView( TimelineItemInformativeView(
text = "Info", text = "Info",
iconDescription = "", iconDescription = "",
icon = Icons.Default.Delete, iconResourceId = CommonDrawables.ic_compound_delete,
extraPadding = noExtraPadding, extraPadding = noExtraPadding,
) )
} }

View file

@ -16,14 +16,13 @@
package io.element.android.features.messages.impl.timeline.components.event package io.element.android.features.messages.impl.timeline.components.event
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRedactedContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRedactedContent
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@Composable @Composable
@ -35,7 +34,7 @@ fun TimelineItemRedactedView(
TimelineItemInformativeView( TimelineItemInformativeView(
text = stringResource(id = CommonStrings.common_message_removed), text = stringResource(id = CommonStrings.common_message_removed),
iconDescription = stringResource(id = CommonStrings.common_message_removed), iconDescription = stringResource(id = CommonStrings.common_message_removed),
icon = Icons.Default.Delete, iconResourceId = CommonDrawables.ic_compound_delete,
extraPadding = extraPadding, extraPadding = extraPadding,
modifier = modifier modifier = modifier
) )

View file

@ -16,14 +16,13 @@
package io.element.android.features.messages.impl.timeline.components.event package io.element.android.features.messages.impl.timeline.components.event
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@Composable @Composable
@ -35,7 +34,7 @@ fun TimelineItemUnknownView(
TimelineItemInformativeView( TimelineItemInformativeView(
text = stringResource(id = CommonStrings.common_unsupported_event), text = stringResource(id = CommonStrings.common_unsupported_event),
iconDescription = stringResource(id = CommonStrings.dialog_title_warning), iconDescription = stringResource(id = CommonStrings.dialog_title_warning),
icon = Icons.Default.Info, iconResourceId = CommonDrawables.ic_compound_info,
extraPadding = extraPadding, extraPadding = extraPadding,
modifier = modifier modifier = modifier
) )

View file

@ -24,14 +24,12 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ExpandLess
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.rotate
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
@ -39,6 +37,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Surface
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
private val CORNER_RADIUS = 8.dp private val CORNER_RADIUS = 8.dp
@ -77,12 +76,12 @@ fun GroupHeaderView(
color = MaterialTheme.colorScheme.secondary, color = MaterialTheme.colorScheme.secondary,
style = ElementTheme.typography.fontBodyMdRegular, style = ElementTheme.typography.fontBodyMdRegular,
) )
val icon = if (isExpanded) { Icon(
Icons.Default.ExpandLess modifier = Modifier.rotate(if (isExpanded) 180f else 0f),
} else { resourceId = CommonDrawables.ic_compound_chevron_down,
Icons.Default.ExpandMore contentDescription = null,
} tint = MaterialTheme.colorScheme.secondary
Icon(icon, "", tint = MaterialTheme.colorScheme.secondary) )
} }
} }
} }

View file

@ -21,9 +21,6 @@ import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -33,6 +30,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.features.messages.impl.R import io.element.android.features.messages.impl.R
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
@ -47,7 +46,7 @@ fun TimelineEncryptedHistoryBannerView(modifier: Modifier = Modifier) {
horizontalArrangement = Arrangement.spacedBy(16.dp) horizontalArrangement = Arrangement.spacedBy(16.dp)
) { ) {
Icon( Icon(
imageVector = Icons.Default.Info, resourceId = CommonDrawables.ic_compound_info,
contentDescription = "Info", contentDescription = "Info",
tint = ElementTheme.colors.iconInfoPrimary tint = ElementTheme.colors.iconInfoPrimary
) )

View file

@ -33,9 +33,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowDropDown
import androidx.compose.material.icons.filled.ArrowDropUp
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -46,6 +43,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.rotate
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
@ -59,6 +57,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@ -140,7 +139,8 @@ private fun CollapsibleSection(
) { ) {
Text(title, modifier = Modifier.weight(1f)) Text(title, modifier = Modifier.weight(1f))
Icon( Icon(
imageVector = if (isExpanded) Icons.Filled.ArrowDropUp else Icons.Filled.ArrowDropDown, modifier = Modifier.rotate(if (isExpanded) 180f else 0f),
resourceId = CommonDrawables.ic_compound_chevron_down,
contentDescription = null contentDescription = null
) )
} }

View file

@ -25,7 +25,6 @@ import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkVertically import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -38,15 +37,12 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.WifiOff
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
@ -55,7 +51,9 @@ import androidx.compose.ui.unit.sp
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.text.toDp import io.element.android.libraries.designsystem.text.toDp
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -144,10 +142,10 @@ private fun Indicator(modifier: Modifier = Modifier) {
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
val tint = MaterialTheme.colorScheme.primary val tint = MaterialTheme.colorScheme.primary
Image( Icon(
imageVector = Icons.Outlined.WifiOff, resourceId = CommonDrawables.ic_compound_offline,
contentDescription = null, contentDescription = null,
colorFilter = ColorFilter.tint(tint), tint = tint,
modifier = Modifier.size(16.sp.toDp()), modifier = Modifier.size(16.sp.toDp()),
) )
Spacer(modifier = Modifier.width(8.dp)) Spacer(modifier = Modifier.width(8.dp))

View file

@ -25,7 +25,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.QrCode import androidx.compose.material.icons.filled.QrCode
import androidx.compose.material.icons.filled.Settings
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment.Companion.CenterHorizontally import androidx.compose.ui.Alignment.Companion.CenterHorizontally
@ -48,6 +47,7 @@ import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.IconSource import io.element.android.libraries.designsystem.theme.components.IconSource
import io.element.android.libraries.designsystem.theme.components.OutlinedButton import io.element.android.libraries.designsystem.theme.components.OutlinedButton
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag import io.element.android.libraries.testtags.testTag
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@ -140,7 +140,7 @@ private fun OnBoardingContent(
onClick = onOpenDeveloperSettings, onClick = onOpenDeveloperSettings,
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Settings, resourceId = CommonDrawables.ic_compound_settings_solid,
contentDescription = stringResource(CommonStrings.common_settings) contentDescription = stringResource(CommonStrings.common_settings)
) )
} }

View file

@ -32,11 +32,11 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.Role
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.VectorIcons
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.poll.PollAnswer import io.element.android.libraries.matrix.api.poll.PollAnswer
import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.poll.PollKind
@ -87,13 +87,13 @@ private fun PollTitle(
) { ) {
if (isPollEnded) { if (isPollEnded) {
Icon( Icon(
resourceId = VectorIcons.PollEnd, resourceId = CommonDrawables.ic_poll_end,
contentDescription = stringResource(id = CommonStrings.a11y_poll_end), contentDescription = stringResource(id = CommonStrings.a11y_poll_end),
modifier = Modifier.size(22.dp) modifier = Modifier.size(22.dp)
) )
} else { } else {
Icon( Icon(
resourceId = VectorIcons.Poll, resourceId = CommonDrawables.ic_compound_polls,
contentDescription = stringResource(id = CommonStrings.a11y_poll), contentDescription = stringResource(id = CommonStrings.a11y_poll),
modifier = Modifier.size(22.dp) modifier = Modifier.size(22.dp)
) )

View file

@ -44,7 +44,6 @@ import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.features.poll.impl.R import io.element.android.features.poll.impl.R
import io.element.android.libraries.designsystem.VectorIcons
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.components.list.ListItemContent
@ -61,6 +60,7 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.poll.PollKind
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -165,7 +165,7 @@ fun CreatePollView(
}, },
trailingContent = ListItemContent.Custom { trailingContent = ListItemContent.Custom {
Icon( Icon(
resourceId = VectorIcons.Delete, resourceId = CommonDrawables.ic_compound_delete,
contentDescription = null, contentDescription = null,
modifier = Modifier.clickable(answer.canDelete) { modifier = Modifier.clickable(answer.canDelete) {
state.eventSink(CreatePollEvents.RemoveAnswer(index)) state.eventSink(CreatePollEvents.RemoveAnswer(index))

View file

@ -28,11 +28,6 @@ import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowDropDown
import androidx.compose.material.icons.filled.ArrowDropUp
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -40,6 +35,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.rotate
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -56,6 +52,7 @@ import io.element.android.libraries.designsystem.theme.components.ListItem
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.tracing.LogLevel import io.element.android.libraries.matrix.api.tracing.LogLevel
import io.element.android.libraries.matrix.api.tracing.Target import io.element.android.libraries.matrix.api.tracing.Target
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@ -93,7 +90,7 @@ fun ConfigureTracingView(
onClick = { showMenu = !showMenu } onClick = { showMenu = !showMenu }
) { ) {
Icon( Icon(
imageVector = Icons.Default.MoreVert, resourceId = CommonDrawables.ic_compound_overflow_vertical,
tint = ElementTheme.materialColors.secondary, tint = ElementTheme.materialColors.secondary,
contentDescription = null, contentDescription = null,
) )
@ -110,7 +107,7 @@ fun ConfigureTracingView(
text = { Text("Reset to default") }, text = { Text("Reset to default") },
leadingIcon = { leadingIcon = {
Icon( Icon(
Icons.Outlined.Delete, resourceId = CommonDrawables.ic_compound_delete,
tint = ElementTheme.materialColors.secondary, tint = ElementTheme.materialColors.secondary,
contentDescription = null, contentDescription = null,
) )
@ -212,11 +209,11 @@ fun LogLevelDropdownMenu(
text = { Text(text = logLevel.filter) }, text = { Text(text = logLevel.filter) },
onClick = { expanded = !expanded }, onClick = { expanded = !expanded },
trailingIcon = { trailingIcon = {
if (expanded) { Icon(
Icon(Icons.Default.ArrowDropUp, contentDescription = null) modifier = Modifier.rotate(if (expanded) 180f else 0f),
} else { resourceId = CommonDrawables.ic_compound_chevron_down,
Icon(Icons.Default.ArrowDropDown, contentDescription = null) contentDescription = null,
} )
}, },
) )
DropdownMenu( DropdownMenu(

View file

@ -23,8 +23,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.NotificationsOff
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -47,6 +45,7 @@ import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.ButtonSize
import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Surface
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.designsystem.utils.OnLifecycleEvent import io.element.android.libraries.designsystem.utils.OnLifecycleEvent
import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationMode
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@ -108,7 +107,7 @@ private fun NotificationSettingsContentView(
val context = LocalContext.current val context = LocalContext.current
if (systemSettings.appNotificationsEnabled && !systemSettings.systemNotificationsEnabled) { if (systemSettings.appNotificationsEnabled && !systemSettings.systemNotificationsEnabled) {
PreferenceText( PreferenceText(
icon = Icons.Filled.NotificationsOff, iconResourceId = CommonDrawables.ic_compound_notifications_solid_off,
title = stringResource(id = CommonStrings.screen_notification_settings_system_notifications_turned_off), title = stringResource(id = CommonStrings.screen_notification_settings_system_notifications_turned_off),
subtitle = stringResource( subtitle = stringResource(
id = CommonStrings.screen_notification_settings_system_notifications_action_required, id = CommonStrings.screen_notification_settings_system_notifications_action_required,

View file

@ -20,13 +20,7 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.BugReport
import androidx.compose.material.icons.outlined.DeveloperMode
import androidx.compose.material.icons.outlined.Help
import androidx.compose.material.icons.outlined.InsertChart import androidx.compose.material.icons.outlined.InsertChart
import androidx.compose.material.icons.outlined.Notifications
import androidx.compose.material.icons.outlined.OpenInNew
import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material.icons.outlined.VerifiedUser import androidx.compose.material.icons.outlined.VerifiedUser
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -43,6 +37,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreviewLight
import io.element.android.libraries.designsystem.preview.LargeHeightPreview import io.element.android.libraries.designsystem.preview.LargeHeightPreview
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.designsystem.utils.SnackbarHost import io.element.android.libraries.designsystem.utils.SnackbarHost
import io.element.android.libraries.designsystem.utils.rememberSnackbarHostState import io.element.android.libraries.designsystem.utils.rememberSnackbarHostState
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
@ -92,7 +87,7 @@ fun PreferencesRootView(
if (state.accountManagementUrl != null) { if (state.accountManagementUrl != null) {
PreferenceText( PreferenceText(
title = stringResource(id = CommonStrings.action_manage_account), title = stringResource(id = CommonStrings.action_manage_account),
icon = Icons.Outlined.OpenInNew, iconResourceId = CommonDrawables.ic_compound_pop_out,
onClick = { onManageAccountClicked(state.accountManagementUrl) }, onClick = { onManageAccountClicked(state.accountManagementUrl) },
) )
HorizontalDivider() HorizontalDivider()
@ -107,32 +102,32 @@ fun PreferencesRootView(
if (state.showNotificationSettings) { if (state.showNotificationSettings) {
PreferenceText( PreferenceText(
title = stringResource(id = CommonStrings.screen_notification_settings_title), title = stringResource(id = CommonStrings.screen_notification_settings_title),
icon = Icons.Outlined.Notifications, iconResourceId = CommonDrawables.ic_compound_notifications,
onClick = onOpenNotificationSettings, onClick = onOpenNotificationSettings,
) )
} }
PreferenceText( PreferenceText(
title = stringResource(id = CommonStrings.action_report_bug), title = stringResource(id = CommonStrings.action_report_bug),
icon = Icons.Outlined.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
onClick = onOpenRageShake onClick = onOpenRageShake
) )
PreferenceText( PreferenceText(
title = stringResource(id = CommonStrings.common_about), title = stringResource(id = CommonStrings.common_about),
icon = Icons.Outlined.Help, iconResourceId = CommonDrawables.ic_compound_info,
onClick = onOpenAbout, onClick = onOpenAbout,
) )
HorizontalDivider() HorizontalDivider()
if (state.devicesManagementUrl != null) { if (state.devicesManagementUrl != null) {
PreferenceText( PreferenceText(
title = stringResource(id = CommonStrings.action_manage_devices), title = stringResource(id = CommonStrings.action_manage_devices),
icon = Icons.Outlined.OpenInNew, iconResourceId = CommonDrawables.ic_compound_pop_out,
onClick = { onManageAccountClicked(state.devicesManagementUrl) }, onClick = { onManageAccountClicked(state.devicesManagementUrl) },
) )
HorizontalDivider() HorizontalDivider()
} }
PreferenceText( PreferenceText(
title = stringResource(id = CommonStrings.common_advanced_settings), title = stringResource(id = CommonStrings.common_advanced_settings),
icon = Icons.Outlined.Settings, iconResourceId = CommonDrawables.ic_compound_settings,
onClick = onOpenAdvancedSettings, onClick = onOpenAdvancedSettings,
) )
if (state.showDeveloperSettings) { if (state.showDeveloperSettings) {
@ -159,7 +154,7 @@ fun PreferencesRootView(
fun DeveloperPreferencesView(onOpenDeveloperSettings: () -> Unit) { fun DeveloperPreferencesView(onOpenDeveloperSettings: () -> Unit) {
PreferenceText( PreferenceText(
title = stringResource(id = CommonStrings.common_developer_options), title = stringResource(id = CommonStrings.common_developer_options),
icon = Icons.Outlined.DeveloperMode, iconResourceId = CommonDrawables.ic_developer_mode,
onClick = onOpenDeveloperSettings onClick = onOpenDeveloperSettings
) )
} }

View file

@ -33,12 +33,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.Add
import androidx.compose.material.icons.outlined.Lock
import androidx.compose.material.icons.outlined.Notifications
import androidx.compose.material.icons.outlined.NotificationsOff
import androidx.compose.material.icons.outlined.Person import androidx.compose.material.icons.outlined.Person
import androidx.compose.material.icons.outlined.PersonAddAlt
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -48,9 +43,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -77,6 +70,7 @@ import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMember
import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationMode
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@ -153,7 +147,8 @@ fun RoomDetailsView(
if (state.canShowNotificationSettings && state.roomNotificationSettings != null) { if (state.canShowNotificationSettings && state.roomNotificationSettings != null) {
NotificationSection( NotificationSection(
isDefaultMode = state.roomNotificationSettings.isDefault, isDefaultMode = state.roomNotificationSettings.isDefault,
openRoomNotificationSettings = openRoomNotificationSettings) openRoomNotificationSettings = openRoomNotificationSettings
)
} }
if (state.roomType is RoomDetailsType.Room) { if (state.roomType is RoomDetailsType.Room) {
@ -230,17 +225,29 @@ internal fun MainActionsSection(state: RoomDetailsState, onShareRoom: () -> Unit
val roomNotificationSettings = state.roomNotificationSettings val roomNotificationSettings = state.roomNotificationSettings
if (state.canShowNotificationSettings && roomNotificationSettings != null) { if (state.canShowNotificationSettings && roomNotificationSettings != null) {
if (roomNotificationSettings.mode == RoomNotificationMode.MUTE) { if (roomNotificationSettings.mode == RoomNotificationMode.MUTE) {
MainActionButton(title = stringResource(CommonStrings.common_unmute), icon = Icons.Outlined.NotificationsOff, onClick = { MainActionButton(
state.eventSink(RoomDetailsEvent.UnmuteNotification) title = stringResource(CommonStrings.common_unmute),
}) iconResourceId = CommonDrawables.ic_compound_notifications_off,
onClick = {
state.eventSink(RoomDetailsEvent.UnmuteNotification)
},
)
} else { } else {
MainActionButton(title = stringResource(CommonStrings.common_mute), icon = Icons.Outlined.Notifications, onClick = { MainActionButton(
state.eventSink(RoomDetailsEvent.MuteNotification) title = stringResource(CommonStrings.common_mute),
}) iconResourceId = CommonDrawables.ic_compound_notifications,
onClick = {
state.eventSink(RoomDetailsEvent.MuteNotification)
},
)
} }
} }
Spacer(modifier = Modifier.width(20.dp)) Spacer(modifier = Modifier.width(20.dp))
MainActionButton(title = stringResource(R.string.screen_room_details_share_room_title), icon = Icons.Outlined.Share, onClick = onShareRoom) MainActionButton(
title = stringResource(R.string.screen_room_details_share_room_title),
iconResourceId = CommonDrawables.ic_compound_share_android,
onClick = onShareRoom
)
} }
} }
@ -322,7 +329,7 @@ internal fun NotificationSection(
PreferenceText( PreferenceText(
title = stringResource(R.string.screen_room_details_notification_title), title = stringResource(R.string.screen_room_details_notification_title),
subtitle = subtitle, subtitle = subtitle,
icon = Icons.Outlined.Notifications, iconResourceId = CommonDrawables.ic_compound_notifications,
onClick = openRoomNotificationSettings, onClick = openRoomNotificationSettings,
) )
} }
@ -352,7 +359,7 @@ internal fun InviteSection(
PreferenceCategory(modifier = modifier) { PreferenceCategory(modifier = modifier) {
PreferenceText( PreferenceText(
title = stringResource(R.string.screen_room_details_invite_people_title), title = stringResource(R.string.screen_room_details_invite_people_title),
icon = Icons.Outlined.PersonAddAlt, iconResourceId = CommonDrawables.ic_compound_user_add,
onClick = invitePeople, onClick = invitePeople,
) )
} }
@ -364,7 +371,7 @@ internal fun SecuritySection(modifier: Modifier = Modifier) {
PreferenceText( PreferenceText(
title = stringResource(R.string.screen_room_details_encryption_enabled_title), title = stringResource(R.string.screen_room_details_encryption_enabled_title),
subtitle = stringResource(R.string.screen_room_details_encryption_enabled_subtitle), subtitle = stringResource(R.string.screen_room_details_encryption_enabled_subtitle),
icon = Icons.Outlined.Lock, iconResourceId = CommonDrawables.ic_compound_lock,
) )
} }
} }
@ -374,7 +381,7 @@ internal fun OtherActionsSection(onLeaveRoom: () -> Unit, modifier: Modifier = M
PreferenceCategory(showDivider = false, modifier = modifier) { PreferenceCategory(showDivider = false, modifier = modifier) {
PreferenceText( PreferenceText(
title = stringResource(R.string.screen_room_details_leave_room_title), title = stringResource(R.string.screen_room_details_leave_room_title),
icon = ImageVector.vectorResource(R.drawable.ic_door_open), iconResourceId = CommonDrawables.ic_compound_leave,
tintColor = MaterialTheme.colorScheme.error, tintColor = MaterialTheme.colorScheme.error,
onClick = onLeaveRoom, onClick = onLeaveRoom,
) )

View file

@ -32,7 +32,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ChatBubbleOutline import androidx.compose.material.icons.outlined.ChatBubbleOutline
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -57,6 +56,7 @@ import io.element.android.libraries.designsystem.preview.LargeHeightPreview
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -126,7 +126,9 @@ internal fun RoomMemberHeaderSection(
text = userId, text = userId,
style = ElementTheme.typography.fontBodyLgRegular, style = ElementTheme.typography.fontBodyLgRegular,
color = MaterialTheme.colorScheme.secondary, color = MaterialTheme.colorScheme.secondary,
modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
) )
Spacer(Modifier.height(40.dp)) Spacer(Modifier.height(40.dp))
@ -136,7 +138,11 @@ internal fun RoomMemberHeaderSection(
@Composable @Composable
internal fun RoomMemberMainActionsSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) { internal fun RoomMemberMainActionsSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) {
Row(modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) { Row(modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) {
MainActionButton(title = stringResource(CommonStrings.action_share), icon = Icons.Outlined.Share, onClick = onShareUser) MainActionButton(
title = stringResource(CommonStrings.action_share),
iconResourceId = CommonDrawables.ic_compound_share_android,
onClick = onShareUser
)
} }
} }

View file

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,520Q457,520 468.5,508.5Q480,497 480,480Q480,463 468.5,451.5Q457,440 440,440Q423,440 411.5,451.5Q400,463 400,480Q400,497 411.5,508.5Q423,520 440,520ZM280,840L280,760L520,720Q520,720 520,720Q520,720 520,720L520,275Q520,260 511,248Q502,236 488,234L280,200L280,120L500,156Q544,164 572,197Q600,230 600,274L600,718Q600,747 581,769.5Q562,792 533,797L280,840ZM280,760L680,760L680,200Q680,200 680,200Q680,200 680,200L280,200Q280,200 280,200Q280,200 280,200L280,760ZM160,840Q143,840 131.5,828.5Q120,817 120,800Q120,783 131.5,771.5Q143,760 160,760L200,760L200,200Q200,166 223.5,143Q247,120 280,120L680,120Q714,120 737,143Q760,166 760,200L760,760L800,760Q817,760 828.5,771.5Q840,783 840,800Q840,817 828.5,828.5Q817,840 800,840L160,840Z"/>
</vector>

View file

@ -22,8 +22,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@ -31,12 +29,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.VectorIcons
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -92,7 +90,7 @@ private fun RoomListModalBottomSheetContent(
modifier = Modifier.clickable { onRoomSettingsClicked(contextMenu.roomId) }, modifier = Modifier.clickable { onRoomSettingsClicked(contextMenu.roomId) },
leadingContent = { leadingContent = {
Icon( Icon(
imageVector = Icons.Outlined.Settings, resourceId = CommonDrawables.ic_compound_settings,
contentDescription = stringResource(id = CommonStrings.common_settings), contentDescription = stringResource(id = CommonStrings.common_settings),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.onSurface, tint = MaterialTheme.colorScheme.onSurface,
@ -110,7 +108,7 @@ private fun RoomListModalBottomSheetContent(
modifier = Modifier.clickable { onLeaveRoomClicked(contextMenu.roomId) }, modifier = Modifier.clickable { onLeaveRoomClicked(contextMenu.roomId) },
leadingContent = { leadingContent = {
Icon( Icon(
resourceId = VectorIcons.DoorOpen, resourceId = CommonDrawables.ic_compound_leave,
contentDescription = stringResource(id = CommonStrings.action_leave_room), contentDescription = stringResource(id = CommonStrings.action_leave_room),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.error, tint = MaterialTheme.colorScheme.error,

View file

@ -57,11 +57,11 @@ import io.element.android.libraries.designsystem.theme.components.FloatingAction
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.designsystem.utils.LogCompositions import io.element.android.libraries.designsystem.utils.LogCompositions
import io.element.android.libraries.designsystem.utils.SnackbarHost import io.element.android.libraries.designsystem.utils.SnackbarHost
import io.element.android.libraries.designsystem.utils.rememberSnackbarHostState import io.element.android.libraries.designsystem.utils.rememberSnackbarHostState
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.designsystem.R as DrawableR
@Composable @Composable
fun RoomListView( fun RoomListView(
@ -231,7 +231,7 @@ fun RoomListContent(
) { ) {
Icon( Icon(
// Note cannot use Icons.Outlined.EditSquare, it does not exist :/ // Note cannot use Icons.Outlined.EditSquare, it does not exist :/
resourceId = DrawableR.drawable.ic_edit_square, resourceId = CommonDrawables.ic_september_compose_button,
contentDescription = stringResource(id = R.string.screen_roomlist_a11y_create_message) contentDescription = stringResource(id = R.string.screen_roomlist_a11y_create_message)
) )
} }

View file

@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -40,6 +38,7 @@ import io.element.android.libraries.designsystem.theme.components.ButtonSize
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Surface
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -70,7 +69,7 @@ internal fun RequestVerificationHeader(
) )
Icon( Icon(
modifier = Modifier.clickable(onClick = onDismissClicked), modifier = Modifier.clickable(onClick = onDismissClicked),
imageVector = Icons.Default.Close, resourceId = CommonDrawables.ic_compound_close,
contentDescription = stringResource(CommonStrings.action_close) contentDescription = stringResource(CommonStrings.action_close)
) )
} }

View file

@ -22,10 +22,6 @@ import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.outlined.BugReport
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
@ -67,6 +63,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.MediumTopAppBar import io.element.android.libraries.designsystem.theme.components.MediumTopAppBar
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.designsystem.utils.LogCompositions import io.element.android.libraries.designsystem.utils.LogCompositions
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
@ -75,7 +72,6 @@ import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag import io.element.android.libraries.testtags.testTag
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
import io.element.android.libraries.designsystem.R as CommonR
private val avatarBloomSize = 430.dp private val avatarBloomSize = 430.dp
@ -210,7 +206,7 @@ private fun DefaultRoomListTopBar(
onClick = onSearchClicked, onClick = onSearchClicked,
) { ) {
Icon( Icon(
resourceId = CommonR.drawable.ic_search, resourceId = CommonDrawables.ic_compound_search,
contentDescription = stringResource(CommonStrings.action_search), contentDescription = stringResource(CommonStrings.action_search),
) )
} }
@ -218,7 +214,7 @@ private fun DefaultRoomListTopBar(
onClick = { showMenu = !showMenu } onClick = { showMenu = !showMenu }
) { ) {
Icon( Icon(
imageVector = Icons.Default.MoreVert, resourceId = CommonDrawables.ic_compound_overflow_vertical,
contentDescription = null, contentDescription = null,
) )
} }
@ -234,7 +230,7 @@ private fun DefaultRoomListTopBar(
text = { Text(stringResource(id = CommonStrings.action_invite)) }, text = { Text(stringResource(id = CommonStrings.action_invite)) },
leadingIcon = { leadingIcon = {
Icon( Icon(
Icons.Outlined.Share, resourceId = CommonDrawables.ic_compound_share_android,
tint = ElementTheme.materialColors.secondary, tint = ElementTheme.materialColors.secondary,
contentDescription = null, contentDescription = null,
) )
@ -248,7 +244,7 @@ private fun DefaultRoomListTopBar(
text = { Text(stringResource(id = CommonStrings.common_report_a_bug)) }, text = { Text(stringResource(id = CommonStrings.common_report_a_bug)) },
leadingIcon = { leadingIcon = {
Icon( Icon(
Icons.Outlined.BugReport, resourceId = CommonDrawables.ic_compound_chat_problem,
tint = ElementTheme.materialColors.secondary, tint = ElementTheme.materialColors.secondary,
contentDescription = null, contentDescription = null,
) )

View file

@ -28,6 +28,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.ripple.rememberRipple import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -44,7 +45,6 @@ import androidx.compose.ui.unit.dp
import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummary
import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryProvider import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryProvider
import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.core.extensions.orEmpty
import io.element.android.libraries.designsystem.VectorIcons
import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom
import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.Avatar
import io.element.android.libraries.designsystem.preview.DayNightPreviews import io.element.android.libraries.designsystem.preview.DayNightPreviews
@ -55,6 +55,7 @@ import io.element.android.libraries.designsystem.theme.roomListRoomMessage
import io.element.android.libraries.designsystem.theme.roomListRoomMessageDate import io.element.android.libraries.designsystem.theme.roomListRoomMessageDate
import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.roomListRoomName
import io.element.android.libraries.designsystem.theme.unreadIndicator import io.element.android.libraries.designsystem.theme.unreadIndicator
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationMode
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -171,12 +172,13 @@ private fun RowScope.LastMessageAndIndicatorRow(room: RoomListRoomSummary) {
// Unread // Unread
Row( Row(
horizontalArrangement = Arrangement.spacedBy(8.dp) horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalAlignment = Alignment.CenterVertically,
) { ) {
NotificationIcon(room) NotificationIcon(room)
if (room.hasUnread) { if (room.hasUnread) {
UnreadIndicatorAtom( UnreadIndicatorAtom(
modifier = Modifier.padding(top = 3.dp), modifier = Modifier.padding(vertical = 3.dp),
) )
} }
} }
@ -189,14 +191,16 @@ private fun NotificationIcon(room: RoomListRoomSummary) {
null, RoomNotificationMode.ALL_MESSAGES -> return null, RoomNotificationMode.ALL_MESSAGES -> return
RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY -> RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY ->
Icon( Icon(
modifier = Modifier.size(16.dp),
contentDescription = stringResource(CommonStrings.screen_notification_settings_mode_mentions), contentDescription = stringResource(CommonStrings.screen_notification_settings_mode_mentions),
imageVector = ImageVector.vectorResource(VectorIcons.Mention), imageVector = ImageVector.vectorResource(CommonDrawables.ic_compound_mention),
tint = tint, tint = tint,
) )
RoomNotificationMode.MUTE -> RoomNotificationMode.MUTE ->
Icon( Icon(
modifier = Modifier.size(16.dp),
contentDescription = stringResource(CommonStrings.common_mute), contentDescription = stringResource(CommonStrings.common_mute),
imageVector = ImageVector.vectorResource(VectorIcons.Mute), imageVector = ImageVector.vectorResource(CommonDrawables.ic_compound_notifications_solid_off),
tint = tint, tint = tint,
) )
} }

View file

@ -27,8 +27,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.TextFieldDefaults import androidx.compose.material3.TextFieldDefaults
@ -65,6 +63,7 @@ import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.TextField import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.designsystem.utils.copy import io.element.android.libraries.designsystem.utils.copy
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -154,7 +153,7 @@ internal fun RoomListSearchResultContent(
state.eventSink(RoomListEvents.UpdateFilter("")) state.eventSink(RoomListEvents.UpdateFilter(""))
}) { }) {
Icon( Icon(
imageVector = Icons.Default.Close, resourceId = CommonDrawables.ic_compound_close,
contentDescription = stringResource(CommonStrings.action_cancel) contentDescription = stringResource(CommonStrings.action_cancel)
) )
} }

View file

@ -1,49 +0,0 @@
/*
* Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.element.android.libraries.designsystem
object VectorIcons {
val Copy = R.drawable.ic_content_copy
val Forward = R.drawable.ic_forward
val Delete = R.drawable.ic_delete
val Reply = R.drawable.ic_reply
val Edit = R.drawable.ic_edit
val DoorOpen = R.drawable.ic_door_open_24
val DeveloperMode = R.drawable.ic_developer_mode
val ReportContent = R.drawable.ic_report_content
val Groups = R.drawable.ic_groups
val Share = R.drawable.ic_share
val Poll = R.drawable.ic_poll
val PollEnd = R.drawable.ic_poll_end
val Bold = R.drawable.ic_bold
val BulletList = R.drawable.ic_bullet_list
val CodeBlock = R.drawable.ic_code_block
val IndentIncrease = R.drawable.ic_indent_increase
val IndentDecrease = R.drawable.ic_indent_decrease
val InlineCode = R.drawable.ic_inline_code
val Italic = R.drawable.ic_italic
val Link = R.drawable.ic_link
val NumberedList = R.drawable.ic_numbered_list
val Quote = R.drawable.ic_quote
val Strikethrough = R.drawable.ic_strikethrough
val Underline = R.drawable.ic_underline
val Mention = R.drawable.ic_mention
val Mute = R.drawable.ic_mute
val ThreadDecoration = R.drawable.ic_thread_decoration
val Plus = R.drawable.ic_plus
val Cancel = R.drawable.ic_cancel
}

View file

@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -35,6 +33,7 @@ import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
@Composable @Composable
fun InfoListItemMolecule( fun InfoListItemMolecule(
@ -79,25 +78,25 @@ internal fun InfoListItemMoleculePreview() {
) { ) {
InfoListItemMolecule( InfoListItemMolecule(
message = { Text("A single item") }, message = { Text("A single item") },
icon = { Icon(imageVector = Icons.Default.Info, contentDescription = null) }, icon = { Icon(resourceId = CommonDrawables.ic_compound_info, contentDescription = null) },
position = InfoListItemPosition.Single, position = InfoListItemPosition.Single,
backgroundColor = color, backgroundColor = color,
) )
InfoListItemMolecule( InfoListItemMolecule(
message = { Text("A top item") }, message = { Text("A top item") },
icon = { Icon(imageVector = Icons.Default.Info, contentDescription = null) }, icon = { Icon(resourceId = CommonDrawables.ic_compound_info, contentDescription = null) },
position = InfoListItemPosition.Top, position = InfoListItemPosition.Top,
backgroundColor = color, backgroundColor = color,
) )
InfoListItemMolecule( InfoListItemMolecule(
message = { Text("A middle item") }, message = { Text("A middle item") },
icon = { Icon(imageVector = Icons.Default.Info, contentDescription = null) }, icon = { Icon(resourceId = CommonDrawables.ic_compound_info, contentDescription = null) },
position = InfoListItemPosition.Middle, position = InfoListItemPosition.Middle,
backgroundColor = color, backgroundColor = color,
) )
InfoListItemMolecule( InfoListItemMolecule(
message = { Text("A bottom item") }, message = { Text("A bottom item") },
icon = { Icon(imageVector = Icons.Default.Info, contentDescription = null) }, icon = { Icon(resourceId = CommonDrawables.ic_compound_info, contentDescription = null) },
position = InfoListItemPosition.Bottom, position = InfoListItemPosition.Bottom,
backgroundColor = color, backgroundColor = color,
) )

View file

@ -88,7 +88,7 @@ fun IconTitleSubtitleMolecule(
@Composable @Composable
internal fun IconTitleSubtitleMoleculePreview() = ElementPreview { internal fun IconTitleSubtitleMoleculePreview() = ElementPreview {
IconTitleSubtitleMolecule( IconTitleSubtitleMolecule(
iconResourceId = R.drawable.ic_edit, iconResourceId = R.drawable.ic_compound_chat,
title = "Title", title = "Title",
subTitle = "Sub iitle", subTitle = "Sub iitle",
) )

View file

@ -33,8 +33,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
@ -114,6 +112,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.MediumTopAppBar import io.element.android.libraries.designsystem.theme.components.MediumTopAppBar
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
@ -375,7 +374,7 @@ fun Modifier.avatarBloom(
width = avatarData.size.dp, width = avatarData.size.dp,
height = avatarData.size.dp, height = avatarData.size.dp,
text = avatarData.initial, text = avatarData.initial,
textColor = avatarColors.foreground, textColor = avatarColors.foreground,
backgroundColor = avatarColors.background, backgroundColor = avatarColors.background,
) )
val hash = remember(avatarData, avatarColors) { val hash = remember(avatarData, avatarColors) {
@ -430,7 +429,7 @@ private fun initialsBitmap(
val bitmap = Bitmap.createBitmap(width.roundToPx(), height.roundToPx(), Bitmap.Config.ARGB_8888).asImageBitmap() val bitmap = Bitmap.createBitmap(width.roundToPx(), height.roundToPx(), Bitmap.Config.ARGB_8888).asImageBitmap()
androidx.compose.ui.graphics.Canvas(bitmap).also { canvas -> androidx.compose.ui.graphics.Canvas(bitmap).also { canvas ->
canvas.drawCircle(centerPx.toOffset(), width.toPx() / 2, backgroundPaint) canvas.drawCircle(centerPx.toOffset(), width.toPx() / 2, backgroundPaint)
canvas.nativeCanvas.drawText(text, centerPx.x.toFloat() - result.size.width/2, centerPx.y * 2f - result.size.height/2 - 4, textPaint) canvas.nativeCanvas.drawText(text, centerPx.x.toFloat() - result.size.width / 2, centerPx.y * 2f - result.size.height / 2 - 4, textPaint)
} }
bitmap bitmap
} }
@ -467,7 +466,9 @@ internal fun BloomPreview() {
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarState) val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarState)
ElementPreview { ElementPreview {
Scaffold( Scaffold(
modifier = Modifier.fillMaxSize().nestedScroll(scrollBehavior.nestedScrollConnection), modifier = Modifier
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = { topBar = {
Box { Box {
MediumTopAppBar( MediumTopAppBar(
@ -499,7 +500,10 @@ internal fun BloomPreview() {
}, },
actions = { actions = {
IconButton(onClick = {}) { IconButton(onClick = {}) {
Icon(imageVector = Icons.Default.Share, contentDescription = null) Icon(
resourceId = CommonDrawables.ic_compound_share_android,
contentDescription = null,
)
} }
}, },
title = { title = {
@ -539,7 +543,8 @@ internal fun BloomInitialsPreview(@PreviewParameter(InitialsColorStateProvider::
val bitmap = initialsBitmap(text = "F", backgroundColor = avatarColors.background, textColor = avatarColors.foreground) val bitmap = initialsBitmap(text = "F", backgroundColor = avatarColors.background, textColor = avatarColors.foreground)
val hash = BlurHash.encode(bitmap.asAndroidBitmap(), BloomDefaults.HASH_COMPONENTS, BloomDefaults.HASH_COMPONENTS) val hash = BlurHash.encode(bitmap.asAndroidBitmap(), BloomDefaults.HASH_COMPONENTS, BloomDefaults.HASH_COMPONENTS)
Box( Box(
modifier = Modifier.size(256.dp) modifier = Modifier
.size(256.dp)
.bloom( .bloom(
hash = hash, hash = hash,
background = if (ElementTheme.isLightTheme) { background = if (ElementTheme.isLightTheme) {

View file

@ -16,25 +16,25 @@
package io.element.android.libraries.designsystem.components.button package io.element.android.libraries.designsystem.components.button
import androidx.annotation.DrawableRes
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@Composable @Composable
fun BackButton( fun BackButton(
onClick: () -> Unit, onClick: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
imageVector: ImageVector = Icons.Default.ArrowBack, // TODO Handle RTL languages
@DrawableRes resourceId: Int = CommonDrawables.ic_compound_arrow_left,
contentDescription: String = stringResource(CommonStrings.action_back), contentDescription: String = stringResource(CommonStrings.action_back),
enabled: Boolean = true, enabled: Boolean = true,
) { ) {
@ -43,7 +43,7 @@ fun BackButton(
onClick = onClick, onClick = onClick,
enabled = enabled, enabled = enabled,
) { ) {
Icon(imageVector = imageVector, contentDescription = contentDescription) Icon(resourceId = resourceId, contentDescription = contentDescription)
} }
} }

View file

@ -16,6 +16,7 @@
package io.element.android.libraries.designsystem.components.button package io.element.android.libraries.designsystem.components.button
import androidx.annotation.DrawableRes
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -24,8 +25,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material.ripple.rememberRipple import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@ -33,19 +32,19 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
fun MainActionButton( fun MainActionButton(
title: String, title: String,
icon: ImageVector, @DrawableRes iconResourceId: Int,
onClick: () -> Unit, onClick: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
enabled: Boolean = true, enabled: Boolean = true,
@ -64,7 +63,7 @@ fun MainActionButton(
) { ) {
val tintColor = if (enabled) LocalContentColor.current else MaterialTheme.colorScheme.secondary val tintColor = if (enabled) LocalContentColor.current else MaterialTheme.colorScheme.secondary
Icon( Icon(
icon, resourceId = iconResourceId,
contentDescription = contentDescription, contentDescription = contentDescription,
tint = tintColor, tint = tintColor,
) )
@ -88,8 +87,17 @@ internal fun MainActionButtonPreview() {
@Composable @Composable
private fun ContentsToPreview() { private fun ContentsToPreview() {
Row(Modifier.padding(10.dp)) { Row(Modifier.padding(10.dp)) {
MainActionButton(title = "Share", icon = Icons.Outlined.Share, onClick = { }) MainActionButton(
title = "Share",
iconResourceId = CommonDrawables.ic_compound_share_android,
onClick = { },
)
Spacer(modifier = Modifier.width(20.dp)) Spacer(modifier = Modifier.width(20.dp))
MainActionButton(title = "Share", icon = Icons.Outlined.Share, onClick = { }, enabled = false) MainActionButton(
title = "Share",
iconResourceId = CommonDrawables.ic_compound_share_android,
onClick = { },
enabled = false,
)
} }
} }

View file

@ -20,9 +20,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Announcement
import androidx.compose.material.icons.filled.BugReport
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@ -30,6 +27,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
@ -79,11 +77,11 @@ private fun ContentToPreview() {
) { ) {
PreferenceText( PreferenceText(
title = "Title", title = "Title",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
) )
PreferenceSwitch( PreferenceSwitch(
title = "Switch", title = "Switch",
icon = Icons.Default.Announcement, iconResourceId = CommonDrawables.ic_compound_threads,
isChecked = true isChecked = true
) )
PreferenceSlide( PreferenceSlide(

View file

@ -16,6 +16,7 @@
package io.element.android.libraries.designsystem.components.preferences package io.element.android.libraries.designsystem.components.preferences
import androidx.annotation.DrawableRes
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -23,8 +24,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Announcement
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -38,6 +37,7 @@ import io.element.android.libraries.designsystem.theme.components.Checkbox
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.toEnabledColor import io.element.android.libraries.designsystem.toEnabledColor
import io.element.android.libraries.designsystem.toSecondaryEnabledColor import io.element.android.libraries.designsystem.toSecondaryEnabledColor
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
@ -48,6 +48,7 @@ fun PreferenceCheckbox(
supportingText: String? = null, supportingText: String? = null,
enabled: Boolean = true, enabled: Boolean = true,
icon: ImageVector? = null, icon: ImageVector? = null,
@DrawableRes iconResourceId: Int? = null,
showIconAreaIfNoIcon: Boolean = false, showIconAreaIfNoIcon: Boolean = false,
onCheckedChange: (Boolean) -> Unit = {}, onCheckedChange: (Boolean) -> Unit = {},
) { ) {
@ -61,6 +62,7 @@ fun PreferenceCheckbox(
) { ) {
PreferenceIcon( PreferenceIcon(
icon = icon, icon = icon,
iconResourceId = iconResourceId,
enabled = enabled, enabled = enabled,
isVisible = showIconAreaIfNoIcon isVisible = showIconAreaIfNoIcon
) )
@ -100,14 +102,14 @@ private fun ContentToPreview() {
Column { Column {
PreferenceCheckbox( PreferenceCheckbox(
title = "Checkbox", title = "Checkbox",
icon = Icons.Default.Announcement, iconResourceId = CommonDrawables.ic_compound_threads,
enabled = true, enabled = true,
isChecked = true isChecked = true
) )
PreferenceCheckbox( PreferenceCheckbox(
title = "Checkbox with supporting text", title = "Checkbox with supporting text",
supportingText = "Supporting text", supportingText = "Supporting text",
icon = Icons.Default.Announcement, iconResourceId = CommonDrawables.ic_compound_threads,
enabled = true, enabled = true,
isChecked = true isChecked = true
) )

View file

@ -28,9 +28,6 @@ import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Announcement
import androidx.compose.material.icons.filled.BugReport
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -42,6 +39,7 @@ import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@OptIn(ExperimentalLayoutApi::class) @OptIn(ExperimentalLayoutApi::class)
@ -115,18 +113,18 @@ internal fun PreferenceViewPreview() = ElementPreview {
PreferenceText( PreferenceText(
title = "Title", title = "Title",
subtitle = "Some other text", subtitle = "Some other text",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
) )
PreferenceDivider() PreferenceDivider()
PreferenceSwitch( PreferenceSwitch(
title = "Switch", title = "Switch",
icon = Icons.Default.Announcement, iconResourceId = CommonDrawables.ic_compound_threads,
isChecked = true, isChecked = true,
) )
PreferenceDivider() PreferenceDivider()
PreferenceCheckbox( PreferenceCheckbox(
title = "Checkbox", title = "Checkbox",
icon = Icons.Default.Announcement, iconResourceId = CommonDrawables.ic_compound_notifications,
isChecked = true, isChecked = true,
) )
PreferenceDivider() PreferenceDivider()

View file

@ -16,14 +16,13 @@
package io.element.android.libraries.designsystem.components.preferences package io.element.android.libraries.designsystem.components.preferences
import androidx.annotation.DrawableRes
import androidx.annotation.FloatRange import androidx.annotation.FloatRange
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Person
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
@ -35,6 +34,7 @@ import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.theme.components.Slider import io.element.android.libraries.designsystem.theme.components.Slider
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.toEnabledColor import io.element.android.libraries.designsystem.toEnabledColor
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
@ -44,6 +44,7 @@ fun PreferenceSlide(
value: Float, value: Float,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
icon: ImageVector? = null, icon: ImageVector? = null,
@DrawableRes iconResourceId: Int? = null,
showIconAreaIfNoIcon: Boolean = false, showIconAreaIfNoIcon: Boolean = false,
enabled: Boolean = true, enabled: Boolean = true,
summary: String? = null, summary: String? = null,
@ -56,7 +57,11 @@ fun PreferenceSlide(
.defaultMinSize(minHeight = preferenceMinHeight) .defaultMinSize(minHeight = preferenceMinHeight)
.padding(vertical = 4.dp, horizontal = preferencePaddingHorizontal), .padding(vertical = 4.dp, horizontal = preferencePaddingHorizontal),
) { ) {
PreferenceIcon(icon = icon, isVisible = showIconAreaIfNoIcon) PreferenceIcon(
icon = icon,
iconResourceId = iconResourceId,
isVisible = showIconAreaIfNoIcon,
)
Column( Column(
modifier = Modifier modifier = Modifier
.weight(1f), .weight(1f),
@ -90,7 +95,7 @@ internal fun PreferenceSlidePreview() = ElementThemedPreview { ContentToPreview(
@Composable @Composable
private fun ContentToPreview() { private fun ContentToPreview() {
PreferenceSlide( PreferenceSlide(
icon = Icons.Default.Person, iconResourceId = CommonDrawables.ic_compound_user_profile,
title = "Slide", title = "Slide",
summary = "Summary", summary = "Summary",
value = 0.75F value = 0.75F

View file

@ -16,6 +16,7 @@
package io.element.android.libraries.designsystem.components.preferences package io.element.android.libraries.designsystem.components.preferences
import androidx.annotation.DrawableRes
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -25,8 +26,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Announcement
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -40,6 +39,7 @@ import io.element.android.libraries.designsystem.theme.components.Switch
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.toEnabledColor import io.element.android.libraries.designsystem.toEnabledColor
import io.element.android.libraries.designsystem.toSecondaryEnabledColor import io.element.android.libraries.designsystem.toSecondaryEnabledColor
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@Composable @Composable
@ -50,6 +50,7 @@ fun PreferenceSwitch(
subtitle: String? = null, subtitle: String? = null,
enabled: Boolean = true, enabled: Boolean = true,
icon: ImageVector? = null, icon: ImageVector? = null,
@DrawableRes iconResourceId: Int? = null,
showIconAreaIfNoIcon: Boolean = false, showIconAreaIfNoIcon: Boolean = false,
onCheckedChange: (Boolean) -> Unit = {}, onCheckedChange: (Boolean) -> Unit = {},
switchAlignment: Alignment.Vertical = Alignment.CenterVertically switchAlignment: Alignment.Vertical = Alignment.CenterVertically
@ -64,6 +65,7 @@ fun PreferenceSwitch(
) { ) {
PreferenceIcon( PreferenceIcon(
icon = icon, icon = icon,
iconResourceId = iconResourceId,
enabled = enabled, enabled = enabled,
isVisible = showIconAreaIfNoIcon isVisible = showIconAreaIfNoIcon
) )
@ -107,7 +109,7 @@ private fun ContentToPreview() {
PreferenceSwitch( PreferenceSwitch(
title = "Switch", title = "Switch",
subtitle = "Subtitle Switch", subtitle = "Subtitle Switch",
icon = Icons.Default.Announcement, iconResourceId = CommonDrawables.ic_compound_threads,
enabled = true, enabled = true,
isChecked = true isChecked = true
) )

View file

@ -16,6 +16,7 @@
package io.element.android.libraries.designsystem.components.preferences package io.element.android.libraries.designsystem.components.preferences
import androidx.annotation.DrawableRes
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -25,8 +26,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.progressSemantics import androidx.compose.foundation.progressSemantics
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.BugReport
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -41,6 +40,7 @@ import io.element.android.libraries.designsystem.theme.components.CircularProgre
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.toEnabledColor import io.element.android.libraries.designsystem.toEnabledColor
import io.element.android.libraries.designsystem.toSecondaryEnabledColor import io.element.android.libraries.designsystem.toSecondaryEnabledColor
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
/** /**
@ -55,6 +55,7 @@ fun PreferenceText(
currentValue: String? = null, currentValue: String? = null,
loadingCurrentValue: Boolean = false, loadingCurrentValue: Boolean = false,
icon: ImageVector? = null, icon: ImageVector? = null,
@DrawableRes iconResourceId: Int? = null,
showIconAreaIfNoIcon: Boolean = false, showIconAreaIfNoIcon: Boolean = false,
tintColor: Color? = null, tintColor: Color? = null,
onClick: () -> Unit = {}, onClick: () -> Unit = {},
@ -71,6 +72,7 @@ fun PreferenceText(
) { ) {
PreferenceIcon( PreferenceIcon(
icon = icon, icon = icon,
iconResourceId = iconResourceId,
enabled = enabled, enabled = enabled,
isVisible = showIconAreaIfNoIcon, isVisible = showIconAreaIfNoIcon,
tintColor = tintColor ?: enabled.toSecondaryEnabledColor(), tintColor = tintColor ?: enabled.toSecondaryEnabledColor(),
@ -126,40 +128,40 @@ private fun ContentToPreview() {
) { ) {
PreferenceText( PreferenceText(
title = "Title", title = "Title",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
) )
PreferenceText( PreferenceText(
title = "Title", title = "Title",
subtitle = "Some content", subtitle = "Some content",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
) )
PreferenceText( PreferenceText(
title = "Title", title = "Title",
subtitle = "Some content", subtitle = "Some content",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
currentValue = "123", currentValue = "123",
) )
PreferenceText( PreferenceText(
title = "Title", title = "Title",
subtitle = "Some content", subtitle = "Some content",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
currentValue = "123", currentValue = "123",
enabled = false, enabled = false,
) )
PreferenceText( PreferenceText(
title = "Title", title = "Title",
subtitle = "Some content", subtitle = "Some content",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
loadingCurrentValue = true, loadingCurrentValue = true,
) )
PreferenceText( PreferenceText(
title = "Title", title = "Title",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
currentValue = "123", currentValue = "123",
) )
PreferenceText( PreferenceText(
title = "Title", title = "Title",
icon = Icons.Default.BugReport, iconResourceId = CommonDrawables.ic_compound_chat_problem,
loadingCurrentValue = true, loadingCurrentValue = true,
) )
PreferenceText( PreferenceText(

View file

@ -16,6 +16,7 @@
package io.element.android.libraries.designsystem.components.preferences.components package io.element.android.libraries.designsystem.components.preferences.components
import androidx.annotation.DrawableRes
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
@ -34,15 +35,17 @@ import io.element.android.libraries.designsystem.toSecondaryEnabledColor
@Composable @Composable
fun PreferenceIcon( fun PreferenceIcon(
icon: ImageVector?,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
icon: ImageVector? = null,
@DrawableRes iconResourceId: Int? = null,
tintColor: Color? = null, tintColor: Color? = null,
enabled: Boolean = true, enabled: Boolean = true,
isVisible: Boolean = true, isVisible: Boolean = true,
) { ) {
if (icon != null) { if (icon != null || iconResourceId != null) {
Icon( Icon(
imageVector = icon, imageVector = icon,
resourceId = iconResourceId,
contentDescription = "", contentDescription = "",
tint = tintColor ?: enabled.toSecondaryEnabledColor(), tint = tintColor ?: enabled.toSecondaryEnabledColor(),
modifier = modifier modifier = modifier
@ -61,5 +64,5 @@ internal fun PreferenceIconPreview(@PreviewParameter(ImageVectorProvider::class)
@Composable @Composable
private fun ContentToPreview(content: ImageVector?) { private fun ContentToPreview(content: ImageVector?) {
PreferenceIcon(content) PreferenceIcon(icon = content)
} }

View file

@ -0,0 +1,133 @@
/*
* Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.element.android.libraries.designsystem.icons
import io.element.android.libraries.designsystem.R
internal val iconsCompound = listOf(
R.drawable.ic_compound_arrow_left,
R.drawable.ic_compound_arrow_right,
R.drawable.ic_compound_arrow_up_right,
R.drawable.ic_compound_block,
R.drawable.ic_compound_chat,
R.drawable.ic_compound_chat_new,
R.drawable.ic_compound_chat_problem,
R.drawable.ic_compound_check,
R.drawable.ic_compound_check_circle,
R.drawable.ic_compound_chevron_down,
R.drawable.ic_compound_chevron_left,
R.drawable.ic_compound_chevron_right,
R.drawable.ic_compound_chevron_up_down,
R.drawable.ic_compound_close,
R.drawable.ic_compound_computer,
R.drawable.ic_compound_delete,
R.drawable.ic_compound_download,
R.drawable.ic_compound_drag_grid,
R.drawable.ic_compound_drag_list,
R.drawable.ic_compound_end_call,
R.drawable.ic_compound_error,
R.drawable.ic_compound_export_archive,
R.drawable.ic_compound_extensions,
R.drawable.ic_compound_favourite_off,
R.drawable.ic_compound_favourite_on,
R.drawable.ic_compound_files,
R.drawable.ic_compound_filter,
R.drawable.ic_compound_grid_view,
R.drawable.ic_compound_info,
R.drawable.ic_compound_leave,
R.drawable.ic_compound_link,
R.drawable.ic_compound_lock,
R.drawable.ic_compound_lock_off,
R.drawable.ic_compound_marker_read_receipts,
R.drawable.ic_compound_mention,
R.drawable.ic_compound_mic_off_outline,
R.drawable.ic_compound_mic_off_solid,
R.drawable.ic_compound_mic_on_outline,
R.drawable.ic_compound_mic_on_solid,
R.drawable.ic_compound_mobile,
R.drawable.ic_compound_notifications,
R.drawable.ic_compound_notifications_off,
R.drawable.ic_compound_notifications_solid,
R.drawable.ic_compound_notifications_solid_off,
R.drawable.ic_compound_offline,
R.drawable.ic_compound_overflow_horizontal,
R.drawable.ic_compound_overflow_vertical,
R.drawable.ic_compound_polls,
R.drawable.ic_compound_pop_out,
R.drawable.ic_compound_public,
R.drawable.ic_compound_search,
R.drawable.ic_compound_settings,
R.drawable.ic_compound_settings_solid,
R.drawable.ic_compound_share,
R.drawable.ic_compound_share_android,
R.drawable.ic_compound_share_screen_outline,
R.drawable.ic_compound_share_screen_solid,
R.drawable.ic_compound_spotlight_view,
R.drawable.ic_compound_threads,
R.drawable.ic_compound_threads_solid,
R.drawable.ic_compound_user_add,
R.drawable.ic_compound_user_add_solid,
R.drawable.ic_compound_user_profile,
R.drawable.ic_compound_verified,
R.drawable.ic_compound_video_call,
R.drawable.ic_compound_video_call_declined,
R.drawable.ic_compound_video_call_missed,
R.drawable.ic_compound_video_call_off,
R.drawable.ic_compound_visibility_off,
R.drawable.ic_compound_visibility_on,
R.drawable.ic_compound_voice_call,
R.drawable.ic_compound_web_browser,
)
internal val iconsSeptember = listOf(
R.drawable.ic_september_add_reaction,
R.drawable.ic_september_attachment,
R.drawable.ic_september_compose_button,
R.drawable.ic_september_copy,
R.drawable.ic_september_decryption_error,
R.drawable.ic_september_edit_outline,
R.drawable.ic_september_edit_solid_16,
R.drawable.ic_september_forward,
R.drawable.ic_september_location,
R.drawable.ic_september_photo_camera,
R.drawable.ic_september_photo_video_library,
R.drawable.ic_september_reply,
R.drawable.ic_september_send,
R.drawable.ic_september_take_photo_camera,
R.drawable.ic_september_text_formatting,
R.drawable.ic_september_video_call,
R.drawable.ic_september_view_source,
)
// This list and all the drawable it contains should be removed at some point.
// All the icons should be defined in Compound.
internal val iconsOther = listOf(
R.drawable.ic_developer_mode,
R.drawable.ic_groups,
R.drawable.ic_indent_decrease,
R.drawable.ic_indent_increase,
R.drawable.ic_inline_code,
R.drawable.ic_italic,
R.drawable.ic_link,
R.drawable.ic_numbered_list,
R.drawable.ic_plus,
R.drawable.ic_poll_end,
R.drawable.ic_quote,
R.drawable.ic_strikethrough,
R.drawable.ic_thread_decoration,
R.drawable.ic_underline,
)

View file

@ -0,0 +1,132 @@
/*
* Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.element.android.libraries.designsystem.icons
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.DayNightPreviews
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.theme.ElementTheme
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toPersistentList
@DayNightPreviews
@Composable
internal fun IconsCompoundPart1Preview() = ElementPreview {
IconsPreview(
title = "R.drawable.ic_compound_* 1 / 2",
iconsList = iconsCompound.take(36).toPersistentList(),
iconNameTransform = { name ->
name.removePrefix("ic_compound_")
.replace("_", " ")
})
}
@DayNightPreviews
@Composable
internal fun IconsCompoundPart2Preview() = ElementPreview {
IconsPreview(
title = "R.drawable.ic_compound_* 2 / 2",
iconsList = iconsCompound.drop(36).toPersistentList(),
iconNameTransform = { name ->
name.removePrefix("ic_compound_")
.replace("_", " ")
})
}
@DayNightPreviews
@Composable
internal fun IconsSeptemberPreview() = ElementPreview {
IconsPreview(
title = "R.drawable.ic_september_*",
iconsList = iconsSeptember.toPersistentList(),
iconNameTransform = { name ->
name.removePrefix("ic_september_")
.replace("_", " ")
})
}
@DayNightPreviews
@Composable
internal fun IconsOtherPreview() = ElementPreview {
IconsPreview(
title = "R.drawable.ic_*",
iconsList = iconsOther.toPersistentList(),
iconNameTransform = { name ->
name.removePrefix("ic_")
.replace("_", " ")
})
}
@Composable
private fun IconsPreview(
title: String,
iconsList: ImmutableList<Int>,
iconNameTransform: (String) -> String,
modifier: Modifier = Modifier,
) = ElementPreview {
val context = LocalContext.current
Column(
modifier = modifier,
verticalArrangement = Arrangement.spacedBy(2.dp),
) {
Text(
modifier = Modifier.fillMaxWidth(),
style = ElementTheme.typography.fontHeadingSmMedium,
text = title,
textAlign = TextAlign.Center,
)
iconsList.chunked(6).forEach { iconsRow ->
Row(horizontalArrangement = Arrangement.spacedBy(1.dp)) {
iconsRow.forEach { icon ->
Column(
modifier = Modifier.width(48.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Icon(
modifier = Modifier.padding(2.dp),
resourceId = icon,
contentDescription = null,
)
Text(
text = iconNameTransform(
context.resources
.getResourceEntryName(icon)
),
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
style = ElementTheme.typography.fontBodyXsMedium,
color = ElementTheme.colors.textSecondary,
)
}
}
}
}
}
}

View file

@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.layout.sizeIn
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Notifications
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.ProvideTextStyle
@ -44,6 +42,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import kotlin.math.max import kotlin.math.max
@ -417,7 +416,10 @@ internal fun DialogWithTitleIconAndOkButtonPreview() {
DialogPreview { DialogPreview {
SimpleAlertDialogContent( SimpleAlertDialogContent(
icon = { icon = {
Icon(imageVector = Icons.Default.Notifications, contentDescription = null) Icon(
resourceId = CommonDrawables.ic_compound_notifications_solid,
contentDescription = null
)
}, },
title = "Dialog Title", title = "Dialog Title",
content = "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made. Learn more", content = "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made. Learn more",

View file

@ -31,8 +31,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.progressSemantics import androidx.compose.foundation.progressSemantics
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonColors
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
@ -53,6 +51,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
// Designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&mode=design&t=U03tOFZz5FSLVUMa-1 // Designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&mode=design&t=U03tOFZz5FSLVUMa-1
@ -346,7 +345,7 @@ private fun ButtonCombinationPreview(
// With icon // With icon
ButtonRowPreview( ButtonRowPreview(
modifier = Modifier.then(modifier), modifier = Modifier.then(modifier),
leadingIcon = IconSource.Vector(Icons.Outlined.Share), leadingIcon = IconSource.Resource(CommonDrawables.ic_compound_share_android),
style = style, style = style,
size = size, size = size,
) )

View file

@ -19,9 +19,6 @@ package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowRight
import androidx.compose.material.icons.filled.BugReport
import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.MenuDefaults import androidx.compose.material3.MenuDefaults
@ -33,6 +30,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
// Figma designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=1032%3A44063&mode=design&t=rsNegTbEVLYAXL76-1 // Figma designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=1032%3A44063&mode=design&t=rsNegTbEVLYAXL76-1
@ -88,32 +86,32 @@ private fun ContentToPreview() {
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = "Item") }, text = { Text(text = "Item") },
onClick = {}, onClick = {},
trailingIcon = { Icon(Icons.Default.ArrowRight, contentDescription = null) }, trailingIcon = { Icon(resourceId = CommonDrawables.ic_compound_chevron_right, contentDescription = null) },
) )
HorizontalDivider() HorizontalDivider()
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = "Item") }, text = { Text(text = "Item") },
onClick = {}, onClick = {},
leadingIcon = { Icon(Icons.Default.BugReport, contentDescription = null) }, leadingIcon = { Icon(resourceId = CommonDrawables.ic_compound_chat_problem, contentDescription = null) },
) )
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = "Item") }, text = { Text(text = "Item") },
onClick = {}, onClick = {},
leadingIcon = { Icon(Icons.Default.BugReport, contentDescription = null) }, leadingIcon = { Icon(resourceId = CommonDrawables.ic_compound_chat_problem, contentDescription = null) },
trailingIcon = { Icon(Icons.Default.ArrowRight, contentDescription = null) }, trailingIcon = { Icon(resourceId = CommonDrawables.ic_compound_chevron_right, contentDescription = null) },
) )
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = "Item") }, text = { Text(text = "Item") },
onClick = {}, onClick = {},
enabled = false, enabled = false,
leadingIcon = { Icon(Icons.Default.BugReport, contentDescription = null) }, leadingIcon = { Icon(resourceId = CommonDrawables.ic_compound_chat_problem, contentDescription = null) },
trailingIcon = { Icon(Icons.Default.ArrowRight, contentDescription = null) }, trailingIcon = { Icon(resourceId = CommonDrawables.ic_compound_chevron_right, contentDescription = null) },
) )
HorizontalDivider() HorizontalDivider()
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = "Multiline\nItem") }, text = { Text(text = "Multiline\nItem") },
onClick = {}, onClick = {},
trailingIcon = { Icon(Icons.Default.ArrowRight, contentDescription = null) }, trailingIcon = { Icon(resourceId = CommonDrawables.ic_compound_chevron_right, contentDescription = null) },
) )
} }
} }

View file

@ -20,8 +20,6 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.FloatingActionButtonDefaults import androidx.compose.material3.FloatingActionButtonDefaults
import androidx.compose.material3.FloatingActionButtonElevation import androidx.compose.material3.FloatingActionButtonElevation
import androidx.compose.material3.contentColorFor import androidx.compose.material3.contentColorFor
@ -34,6 +32,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
@Composable @Composable
fun FloatingActionButton( fun FloatingActionButton(
@ -67,7 +66,7 @@ internal fun FloatingActionButtonPreview() =
private fun ContentToPreview() { private fun ContentToPreview() {
Box(modifier = Modifier.padding(8.dp)) { Box(modifier = Modifier.padding(8.dp)) {
FloatingActionButton(onClick = {}) { FloatingActionButton(onClick = {}) {
Icon(imageVector = Icons.Filled.Close, contentDescription = "") Icon(resourceId = CommonDrawables.ic_compound_close, contentDescription = "")
} }
} }
} }

View file

@ -17,8 +17,6 @@
package io.element.android.libraries.designsystem.theme.components package io.element.android.libraries.designsystem.theme.components
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -30,6 +28,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
/** /**
* Icon is a wrapper around [androidx.compose.material3.Icon] which allows to use * Icon is a wrapper around [androidx.compose.material3.Icon] which allows to use
@ -146,5 +145,5 @@ internal fun IconImageVectorPreview() =
@Composable @Composable
private fun ContentToPreview() { private fun ContentToPreview() {
Icon(imageVector = Icons.Filled.Close, contentDescription = "") Icon(resourceId = CommonDrawables.ic_compound_close, contentDescription = "")
} }

View file

@ -19,8 +19,6 @@ package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -30,6 +28,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
// Figma designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=1182%3A48861&mode=design&t=Shlcvznm1oUyqGC2-1 // Figma designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=1182%3A48861&mode=design&t=Shlcvznm1oUyqGC2-1
@ -67,20 +66,20 @@ private fun ContentToPreview() {
CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.iconPrimary) { CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.iconPrimary) {
Row { Row {
IconButton(onClick = {}) { IconButton(onClick = {}) {
Icon(imageVector = Icons.Filled.Close, contentDescription = "") Icon(resourceId = CommonDrawables.ic_compound_close, contentDescription = "")
} }
IconButton(enabled = false, onClick = {}) { IconButton(enabled = false, onClick = {}) {
Icon(imageVector = Icons.Filled.Close, contentDescription = "") Icon(resourceId = CommonDrawables.ic_compound_close, contentDescription = "")
} }
} }
} }
CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.iconSecondary) { CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.iconSecondary) {
Row { Row {
IconButton(onClick = {}) { IconButton(onClick = {}) {
Icon(imageVector = Icons.Filled.Close, contentDescription = "") Icon(resourceId = CommonDrawables.ic_compound_close, contentDescription = "")
} }
IconButton(enabled = false, onClick = {}) { IconButton(enabled = false, onClick = {}) {
Icon(imageVector = Icons.Filled.Close, contentDescription = "") Icon(resourceId = CommonDrawables.ic_compound_close, contentDescription = "")
} }
} }
} }

View file

@ -17,8 +17,6 @@
package io.element.android.libraries.designsystem.theme.components package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.ListItemColors import androidx.compose.material3.ListItemColors
import androidx.compose.material3.ListItemDefaults import androidx.compose.material3.ListItemDefaults
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
@ -37,6 +35,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.components.list.ListItemContent
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
// Designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=425%3A24208&mode=design&t=G5hCfkLB6GgXDuWe-1 // Designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=425%3A24208&mode=design&t=G5hCfkLB6GgXDuWe-1
@ -119,7 +118,9 @@ fun ListItem(
androidx.compose.material3.ListItem( androidx.compose.material3.ListItem(
headlineContent = decoratedHeadlineContent, headlineContent = decoratedHeadlineContent,
modifier = if (onClick != null) Modifier.clickable(enabled = enabled, onClick = onClick).then(modifier) else modifier, modifier = if (onClick != null) Modifier
.clickable(enabled = enabled, onClick = onClick)
.then(modifier) else modifier,
overlineContent = null, overlineContent = null,
supportingContent = decoratedSupportingContent, supportingContent = decoratedSupportingContent,
leadingContent = decoratedLeadingContent, leadingContent = decoratedLeadingContent,
@ -135,27 +136,31 @@ fun ListItem(
*/ */
sealed interface ListItemStyle { sealed interface ListItemStyle {
data object Default : ListItemStyle data object Default : ListItemStyle
data object Primary: ListItemStyle data object Primary : ListItemStyle
data object Destructive : ListItemStyle data object Destructive : ListItemStyle
@Composable fun headlineColor() = when (this) { @Composable
fun headlineColor() = when (this) {
Default, Primary -> ListItemDefaultColors.headline Default, Primary -> ListItemDefaultColors.headline
Destructive -> ElementTheme.colors.textCriticalPrimary Destructive -> ElementTheme.colors.textCriticalPrimary
} }
@Composable fun supportingTextColor() = when (this) { @Composable
fun supportingTextColor() = when (this) {
Default, Primary -> ListItemDefaultColors.supportingText Default, Primary -> ListItemDefaultColors.supportingText
// FIXME once we have a defined color for this value // FIXME once we have a defined color for this value
Destructive -> ElementTheme.colors.textCriticalPrimary.copy(alpha = 0.8f) Destructive -> ElementTheme.colors.textCriticalPrimary.copy(alpha = 0.8f)
} }
@Composable fun leadingIconColor() = when (this) { @Composable
fun leadingIconColor() = when (this) {
Default -> ListItemDefaultColors.icon Default -> ListItemDefaultColors.icon
Primary -> ElementTheme.colors.iconPrimary Primary -> ElementTheme.colors.iconPrimary
Destructive -> ElementTheme.colors.iconCriticalPrimary Destructive -> ElementTheme.colors.iconCriticalPrimary
} }
@Composable fun trailingIconColor() = when (this) { @Composable
fun trailingIconColor() = when (this) {
Default -> ListItemDefaultColors.icon Default -> ListItemDefaultColors.icon
Primary -> ElementTheme.colors.iconPrimary Primary -> ElementTheme.colors.iconPrimary
Destructive -> ElementTheme.colors.iconCriticalPrimary Destructive -> ElementTheme.colors.iconCriticalPrimary
@ -169,15 +174,16 @@ object ListItemDefaultColors {
val icon: Color @Composable get() = ElementTheme.colors.iconTertiary val icon: Color @Composable get() = ElementTheme.colors.iconTertiary
val iconDisabled: Color @Composable get() = ElementTheme.colors.iconDisabled val iconDisabled: Color @Composable get() = ElementTheme.colors.iconDisabled
val colors: ListItemColors @Composable get() = ListItemDefaults.colors( val colors: ListItemColors
headlineColor = headline, @Composable get() = ListItemDefaults.colors(
supportingColor = supportingText, headlineColor = headline,
leadingIconColor = icon, supportingColor = supportingText,
trailingIconColor = icon, leadingIconColor = icon,
disabledHeadlineColor = headlineDisabled, trailingIconColor = icon,
disabledLeadingIconColor = iconDisabled, disabledHeadlineColor = headlineDisabled,
disabledTrailingIconColor = iconDisabled, disabledLeadingIconColor = iconDisabled,
) disabledTrailingIconColor = iconDisabled,
)
} }
// region: Simple list item // region: Simple list item
@ -191,7 +197,7 @@ internal fun ListItemTwoLinesSimplePreview() = PreviewItems.TwoLinesListItemPrev
@Preview(name = "List item (1 line) - Simple", group = PreviewGroup.ListItems) @Preview(name = "List item (1 line) - Simple", group = PreviewGroup.ListItems)
@Composable @Composable
internal fun ListItemSingleLineSimplePreview() = PreviewItems.OneLineListItemPreview() internal fun ListItemSingleLineSimplePreview() = PreviewItems.OneLineListItemPreview()
// endregion // endregion
// region: Trailing Checkbox // region: Trailing Checkbox
@ -453,10 +459,12 @@ private object PreviewItems {
} }
@Composable @Composable
fun switch() : ListItemContent { fun switch(): ListItemContent {
var checked by remember { mutableStateOf(false) } var checked by remember { mutableStateOf(false) }
return ListItemContent.Switch(checked = checked, onChange = { checked = !checked }) return ListItemContent.Switch(checked = checked, onChange = { checked = !checked })
} }
fun icon() = ListItemContent.Icon(iconSource = IconSource.Vector(Icons.Outlined.Share)) fun icon() = ListItemContent.Icon(
iconSource = IconSource.Resource(CommonDrawables.ic_compound_share_android)
)
} }

View file

@ -21,8 +21,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.LocalTextStyle
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -37,6 +35,7 @@ import io.element.android.libraries.designsystem.components.ClickableLinkText
import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.components.list.ListItemContent
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
// Designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=425%3A24208&mode=design&t=G5hCfkLB6GgXDuWe-1 // Designs: https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=425%3A24208&mode=design&t=G5hCfkLB6GgXDuWe-1
@ -128,12 +127,16 @@ object ListSupportingTextDefaults {
sealed interface Padding { sealed interface Padding {
/** No padding. */ /** No padding. */
data object None : Padding data object None : Padding
/** Default padding, it will align fine with a [ListItem] with no leading content. */ /** Default padding, it will align fine with a [ListItem] with no leading content. */
data object Default : Padding data object Default : Padding
/** It will align to a [ListItem] with an [Icon] or [Checkbox] as leading content. */ /** It will align to a [ListItem] with an [Icon] or [Checkbox] as leading content. */
data object SmallLeadingContent : Padding data object SmallLeadingContent : Padding
/** It will align to with a [ListItem] with a [Switch] as leading content. */ /** It will align to with a [ListItem] with a [Switch] as leading content. */
data object LargeLeadingContent : Padding data object LargeLeadingContent : Padding
/** It will align to with a [ListItem] with a custom start [padding]. */ /** It will align to with a [ListItem] with a custom start [padding]. */
data class Custom(val padding: Dp) : Padding data class Custom(val padding: Dp) : Padding
@ -256,7 +259,10 @@ internal fun ListSupportingTextDefaultPaddingPreview() {
internal fun ListSupportingTextSmallPaddingPreview() { internal fun ListSupportingTextSmallPaddingPreview() {
ElementThemedPreview { ElementThemedPreview {
Column { Column {
ListItem(headlineContent = { Text("A title") }, leadingContent = ListItemContent.Icon(IconSource.Vector(Icons.Outlined.Share))) ListItem(
headlineContent = { Text("A title") },
leadingContent = ListItemContent.Icon(IconSource.Resource(CommonDrawables.ic_compound_share_android))
)
ListSupportingText( ListSupportingText(
text = "Supporting line text lorem ipsum dolor sit amet, consectetur. Read more", text = "Supporting line text lorem ipsum dolor sit amet, consectetur. Read more",
contentPadding = ListSupportingTextDefaults.Padding.SmallLeadingContent, contentPadding = ListSupportingTextDefaults.Padding.SmallLeadingContent,

View file

@ -18,8 +18,6 @@ package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.TopAppBarColors import androidx.compose.material3.TopAppBarColors
@ -32,6 +30,7 @@ import androidx.compose.ui.tooling.preview.Preview
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -74,7 +73,10 @@ private fun ContentToPreview() {
actions = { actions = {
TextButton(text = "Action", onClick = {}) TextButton(text = "Action", onClick = {})
IconButton(onClick = {}) { IconButton(onClick = {}) {
Icon(imageVector = Icons.Default.Share, contentDescription = null) Icon(
resourceId = CommonDrawables.ic_compound_share_android,
contentDescription = null,
)
} }
} }
) )

View file

@ -24,9 +24,6 @@ import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Search
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SearchBarColors import androidx.compose.material3.SearchBarColors
@ -46,6 +43,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
@ -99,7 +97,7 @@ fun <T> SearchBar(
{ {
IconButton(onClick = { onQueryChange("") }) { IconButton(onClick = { onQueryChange("") }) {
Icon( Icon(
imageVector = Icons.Default.Close, resourceId = CommonDrawables.ic_compound_close,
contentDescription = stringResource(CommonStrings.action_clear), contentDescription = stringResource(CommonStrings.action_clear),
) )
} }
@ -109,7 +107,7 @@ fun <T> SearchBar(
!active -> { !active -> {
{ {
Icon( Icon(
imageVector = Icons.Default.Search, resourceId = CommonDrawables.ic_compound_search,
contentDescription = stringResource(CommonStrings.action_search), contentDescription = stringResource(CommonStrings.action_search),
tint = MaterialTheme.colorScheme.tertiary, tint = MaterialTheme.colorScheme.tertiary,
) )

View file

@ -17,8 +17,6 @@
package io.element.android.libraries.designsystem.theme.components package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.SnackbarDefaults import androidx.compose.material3.SnackbarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -29,6 +27,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.components.button.ButtonVisuals import io.element.android.libraries.designsystem.components.button.ButtonVisuals
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.theme.SnackBarLabelColorDark import io.element.android.libraries.theme.SnackBarLabelColorDark
import io.element.android.libraries.theme.SnackBarLabelColorLight import io.element.android.libraries.theme.SnackBarLabelColorLight
@ -119,8 +118,10 @@ internal fun SnackbarWithActionAndCloseButtonPreview() {
ElementThemedPreview { ElementThemedPreview {
Snackbar( Snackbar(
message = "Snackbar supporting text", message = "Snackbar supporting text",
action = ButtonVisuals.Text("Action", {}), action = ButtonVisuals.Text("Action") {},
dismissAction = ButtonVisuals.Icon(IconSource.Vector(Icons.Default.Close), {}) dismissAction = ButtonVisuals.Icon(
IconSource.Resource(CommonDrawables.ic_compound_close)
) {}
) )
} }
} }
@ -140,7 +141,9 @@ internal fun SnackbarWithActionOnNewLineAndCloseButtonPreview() {
Snackbar( Snackbar(
message = "Snackbar supporting text", message = "Snackbar supporting text",
action = ButtonVisuals.Text("Action", {}), action = ButtonVisuals.Text("Action", {}),
dismissAction = ButtonVisuals.Icon(IconSource.Vector(Icons.Default.Close), {}), dismissAction = ButtonVisuals.Icon(
IconSource.Resource(CommonDrawables.ic_compound_close)
) {},
actionOnNewLine = true actionOnNewLine = true
) )
} }

View file

@ -18,8 +18,6 @@ package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.TopAppBarColors import androidx.compose.material3.TopAppBarColors
@ -32,6 +30,7 @@ import androidx.compose.ui.tooling.preview.Preview
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -74,7 +73,10 @@ private fun ContentToPreview() {
actions = { actions = {
TextButton(text = "Action", onClick = {}) TextButton(text = "Action", onClick = {})
IconButton(onClick = {}) { IconButton(onClick = {}) {
Icon(imageVector = Icons.Default.Share, contentDescription = null) Icon(
resourceId = CommonDrawables.ic_compound_share_android,
contentDescription = null,
)
} }
} }
) )

View file

@ -17,7 +17,6 @@
package io.element.android.libraries.designsystem.theme.components.previews package io.element.android.libraries.designsystem.theme.components.previews
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowRight
import androidx.compose.material.icons.filled.Favorite import androidx.compose.material.icons.filled.Favorite
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -32,6 +31,7 @@ import io.element.android.libraries.designsystem.theme.components.DropdownMenu
import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
@Preview(group = PreviewGroup.Menus) @Preview(group = PreviewGroup.Menus)
@Composable @Composable
@ -51,7 +51,10 @@ internal fun MenuPreview() {
val trailingIcon: @Composable (() -> Unit)? = if (i in 3..4) { val trailingIcon: @Composable (() -> Unit)? = if (i in 3..4) {
@Composable { @Composable {
Icon(Icons.Filled.ArrowRight, contentDescription = "Favorite") Icon(
resourceId = CommonDrawables.ic_compound_chevron_right,
contentDescription = "Favorite",
)
} }
} else { } else {
null null

View file

@ -18,8 +18,6 @@ package io.element.android.libraries.designsystem.utils
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -88,7 +86,10 @@ fun SnackbarHost(hostState: SnackbarHostState, modifier: Modifier = Modifier) {
message = data.visuals.message, message = data.visuals.message,
action = data.visuals.actionLabel?.let { ButtonVisuals.Text(it, data::performAction) }, action = data.visuals.actionLabel?.let { ButtonVisuals.Text(it, data::performAction) },
dismissAction = if (data.visuals.withDismissAction) { dismissAction = if (data.visuals.withDismissAction) {
ButtonVisuals.Icon(IconSource.Vector(Icons.Default.Close), data::dismiss) ButtonVisuals.Icon(
IconSource.Resource(CommonDrawables.ic_compound_close),
data::dismiss
)
} else null, } else null,
) )
} }

View file

@ -5,5 +5,5 @@
android:viewportHeight="20"> android:viewportHeight="20">
<path <path
android:pathData="M7.333,15.833C6.875,15.833 6.483,15.67 6.156,15.343C5.83,15.017 5.667,14.624 5.667,14.166V5.833C5.667,5.374 5.83,4.982 6.156,4.656C6.483,4.329 6.875,4.166 7.333,4.166H10.271C11.174,4.166 12.007,4.444 12.771,4.999C13.535,5.555 13.917,6.326 13.917,7.312C13.917,8.02 13.757,8.565 13.438,8.947C13.118,9.329 12.819,9.604 12.542,9.77C12.889,9.923 13.274,10.208 13.698,10.624C14.122,11.041 14.333,11.666 14.333,12.499C14.333,13.736 13.882,14.6 12.979,15.093C12.076,15.586 11.229,15.833 10.438,15.833H7.333ZM8.188,13.499H10.354C11.021,13.499 11.427,13.329 11.573,12.989C11.719,12.649 11.792,12.402 11.792,12.249C11.792,12.097 11.719,11.85 11.573,11.51C11.427,11.17 11,10.999 10.292,10.999H8.188V13.499ZM8.188,8.749H10.125C10.583,8.749 10.917,8.631 11.125,8.395C11.333,8.159 11.438,7.895 11.438,7.604C11.438,7.27 11.319,6.999 11.083,6.791C10.847,6.583 10.542,6.479 10.167,6.479H8.188V8.749Z" android:pathData="M7.333,15.833C6.875,15.833 6.483,15.67 6.156,15.343C5.83,15.017 5.667,14.624 5.667,14.166V5.833C5.667,5.374 5.83,4.982 6.156,4.656C6.483,4.329 6.875,4.166 7.333,4.166H10.271C11.174,4.166 12.007,4.444 12.771,4.999C13.535,5.555 13.917,6.326 13.917,7.312C13.917,8.02 13.757,8.565 13.438,8.947C13.118,9.329 12.819,9.604 12.542,9.77C12.889,9.923 13.274,10.208 13.698,10.624C14.122,11.041 14.333,11.666 14.333,12.499C14.333,13.736 13.882,14.6 12.979,15.093C12.076,15.586 11.229,15.833 10.438,15.833H7.333ZM8.188,13.499H10.354C11.021,13.499 11.427,13.329 11.573,12.989C11.719,12.649 11.792,12.402 11.792,12.249C11.792,12.097 11.719,11.85 11.573,11.51C11.427,11.17 11,10.999 10.292,10.999H8.188V13.499ZM8.188,8.749H10.125C10.583,8.749 10.917,8.631 11.125,8.395C11.333,8.159 11.438,7.895 11.438,7.604C11.438,7.27 11.319,6.999 11.083,6.791C10.847,6.583 10.542,6.479 10.167,6.479H8.188V8.749Z"
android:fillColor="#656D77"/> android:fillColor="@android:color/white"/>
</vector> </vector>

View file

@ -5,5 +5,5 @@
android:viewportHeight="20"> android:viewportHeight="20">
<path <path
android:pathData="M8.333,15.834C8.097,15.834 7.899,15.754 7.74,15.594C7.58,15.435 7.5,15.237 7.5,15.001C7.5,14.764 7.58,14.567 7.74,14.407C7.899,14.247 8.097,14.167 8.333,14.167H16.667C16.903,14.167 17.101,14.247 17.26,14.407C17.42,14.567 17.5,14.764 17.5,15.001C17.5,15.237 17.42,15.435 17.26,15.594C17.101,15.754 16.903,15.834 16.667,15.834H8.333ZM8.333,10.834C8.097,10.834 7.899,10.754 7.74,10.594C7.58,10.435 7.5,10.237 7.5,10.001C7.5,9.765 7.58,9.567 7.74,9.407C7.899,9.247 8.097,9.167 8.333,9.167H16.667C16.903,9.167 17.101,9.247 17.26,9.407C17.42,9.567 17.5,9.765 17.5,10.001C17.5,10.237 17.42,10.435 17.26,10.594C17.101,10.754 16.903,10.834 16.667,10.834H8.333ZM8.333,5.834C8.097,5.834 7.899,5.754 7.74,5.594C7.58,5.435 7.5,5.237 7.5,5.001C7.5,4.765 7.58,4.567 7.74,4.407C7.899,4.247 8.097,4.167 8.333,4.167H16.667C16.903,4.167 17.101,4.247 17.26,4.407C17.42,4.567 17.5,4.765 17.5,5.001C17.5,5.237 17.42,5.435 17.26,5.594C17.101,5.754 16.903,5.834 16.667,5.834H8.333ZM4.167,16.667C3.708,16.667 3.316,16.504 2.99,16.178C2.663,15.851 2.5,15.459 2.5,15.001C2.5,14.542 2.663,14.15 2.99,13.824C3.316,13.497 3.708,13.334 4.167,13.334C4.625,13.334 5.017,13.497 5.344,13.824C5.67,14.15 5.833,14.542 5.833,15.001C5.833,15.459 5.67,15.851 5.344,16.178C5.017,16.504 4.625,16.667 4.167,16.667ZM4.167,11.667C3.708,11.667 3.316,11.504 2.99,11.178C2.663,10.851 2.5,10.459 2.5,10.001C2.5,9.542 2.663,9.15 2.99,8.824C3.316,8.497 3.708,8.334 4.167,8.334C4.625,8.334 5.017,8.497 5.344,8.824C5.67,9.15 5.833,9.542 5.833,10.001C5.833,10.459 5.67,10.851 5.344,11.178C5.017,11.504 4.625,11.667 4.167,11.667ZM4.167,6.667C3.708,6.667 3.316,6.504 2.99,6.178C2.663,5.851 2.5,5.459 2.5,5.001C2.5,4.542 2.663,4.15 2.99,3.824C3.316,3.497 3.708,3.334 4.167,3.334C4.625,3.334 5.017,3.497 5.344,3.824C5.67,4.15 5.833,4.542 5.833,5.001C5.833,5.459 5.67,5.851 5.344,6.178C5.017,6.504 4.625,6.667 4.167,6.667Z" android:pathData="M8.333,15.834C8.097,15.834 7.899,15.754 7.74,15.594C7.58,15.435 7.5,15.237 7.5,15.001C7.5,14.764 7.58,14.567 7.74,14.407C7.899,14.247 8.097,14.167 8.333,14.167H16.667C16.903,14.167 17.101,14.247 17.26,14.407C17.42,14.567 17.5,14.764 17.5,15.001C17.5,15.237 17.42,15.435 17.26,15.594C17.101,15.754 16.903,15.834 16.667,15.834H8.333ZM8.333,10.834C8.097,10.834 7.899,10.754 7.74,10.594C7.58,10.435 7.5,10.237 7.5,10.001C7.5,9.765 7.58,9.567 7.74,9.407C7.899,9.247 8.097,9.167 8.333,9.167H16.667C16.903,9.167 17.101,9.247 17.26,9.407C17.42,9.567 17.5,9.765 17.5,10.001C17.5,10.237 17.42,10.435 17.26,10.594C17.101,10.754 16.903,10.834 16.667,10.834H8.333ZM8.333,5.834C8.097,5.834 7.899,5.754 7.74,5.594C7.58,5.435 7.5,5.237 7.5,5.001C7.5,4.765 7.58,4.567 7.74,4.407C7.899,4.247 8.097,4.167 8.333,4.167H16.667C16.903,4.167 17.101,4.247 17.26,4.407C17.42,4.567 17.5,4.765 17.5,5.001C17.5,5.237 17.42,5.435 17.26,5.594C17.101,5.754 16.903,5.834 16.667,5.834H8.333ZM4.167,16.667C3.708,16.667 3.316,16.504 2.99,16.178C2.663,15.851 2.5,15.459 2.5,15.001C2.5,14.542 2.663,14.15 2.99,13.824C3.316,13.497 3.708,13.334 4.167,13.334C4.625,13.334 5.017,13.497 5.344,13.824C5.67,14.15 5.833,14.542 5.833,15.001C5.833,15.459 5.67,15.851 5.344,16.178C5.017,16.504 4.625,16.667 4.167,16.667ZM4.167,11.667C3.708,11.667 3.316,11.504 2.99,11.178C2.663,10.851 2.5,10.459 2.5,10.001C2.5,9.542 2.663,9.15 2.99,8.824C3.316,8.497 3.708,8.334 4.167,8.334C4.625,8.334 5.017,8.497 5.344,8.824C5.67,9.15 5.833,9.542 5.833,10.001C5.833,10.459 5.67,10.851 5.344,11.178C5.017,11.504 4.625,11.667 4.167,11.667ZM4.167,6.667C3.708,6.667 3.316,6.504 2.99,6.178C2.663,5.851 2.5,5.459 2.5,5.001C2.5,4.542 2.663,4.15 2.99,3.824C3.316,3.497 3.708,3.334 4.167,3.334C4.625,3.334 5.017,3.497 5.344,3.824C5.67,4.15 5.833,4.542 5.833,5.001C5.833,5.459 5.67,5.851 5.344,6.178C5.017,6.504 4.625,6.667 4.167,6.667Z"
android:fillColor="#656D77"/> android:fillColor="@android:color/white"/>
</vector> </vector>

View file

@ -5,5 +5,5 @@
android:viewportHeight="20"> android:viewportHeight="20">
<path <path
android:pathData="M7.354,10L8.583,8.771C8.75,8.604 8.833,8.41 8.833,8.188C8.833,7.965 8.75,7.771 8.583,7.604C8.417,7.438 8.219,7.354 7.99,7.354C7.76,7.354 7.563,7.438 7.396,7.604L5.583,9.417C5.5,9.5 5.441,9.59 5.406,9.688C5.372,9.785 5.354,9.889 5.354,10C5.354,10.111 5.372,10.215 5.406,10.313C5.441,10.41 5.5,10.5 5.583,10.583L7.396,12.396C7.563,12.563 7.76,12.646 7.99,12.646C8.219,12.646 8.417,12.563 8.583,12.396C8.75,12.229 8.833,12.035 8.833,11.813C8.833,11.59 8.75,11.396 8.583,11.229L7.354,10ZM12.646,10L11.417,11.229C11.25,11.396 11.167,11.59 11.167,11.813C11.167,12.035 11.25,12.229 11.417,12.396C11.583,12.563 11.781,12.646 12.01,12.646C12.24,12.646 12.438,12.563 12.604,12.396L14.417,10.583C14.5,10.5 14.559,10.41 14.594,10.313C14.628,10.215 14.646,10.111 14.646,10C14.646,9.889 14.628,9.785 14.594,9.688C14.559,9.59 14.5,9.5 14.417,9.417L12.604,7.604C12.521,7.521 12.427,7.458 12.323,7.417C12.219,7.375 12.115,7.354 12.01,7.354C11.906,7.354 11.802,7.375 11.698,7.417C11.594,7.458 11.5,7.521 11.417,7.604C11.25,7.771 11.167,7.965 11.167,8.188C11.167,8.41 11.25,8.604 11.417,8.771L12.646,10ZM4.167,17.5C3.708,17.5 3.316,17.337 2.99,17.01C2.663,16.684 2.5,16.292 2.5,15.833V4.167C2.5,3.708 2.663,3.316 2.99,2.99C3.316,2.663 3.708,2.5 4.167,2.5H15.833C16.292,2.5 16.684,2.663 17.01,2.99C17.337,3.316 17.5,3.708 17.5,4.167V15.833C17.5,16.292 17.337,16.684 17.01,17.01C16.684,17.337 16.292,17.5 15.833,17.5H4.167ZM4.167,15.833H15.833V4.167H4.167V15.833Z" android:pathData="M7.354,10L8.583,8.771C8.75,8.604 8.833,8.41 8.833,8.188C8.833,7.965 8.75,7.771 8.583,7.604C8.417,7.438 8.219,7.354 7.99,7.354C7.76,7.354 7.563,7.438 7.396,7.604L5.583,9.417C5.5,9.5 5.441,9.59 5.406,9.688C5.372,9.785 5.354,9.889 5.354,10C5.354,10.111 5.372,10.215 5.406,10.313C5.441,10.41 5.5,10.5 5.583,10.583L7.396,12.396C7.563,12.563 7.76,12.646 7.99,12.646C8.219,12.646 8.417,12.563 8.583,12.396C8.75,12.229 8.833,12.035 8.833,11.813C8.833,11.59 8.75,11.396 8.583,11.229L7.354,10ZM12.646,10L11.417,11.229C11.25,11.396 11.167,11.59 11.167,11.813C11.167,12.035 11.25,12.229 11.417,12.396C11.583,12.563 11.781,12.646 12.01,12.646C12.24,12.646 12.438,12.563 12.604,12.396L14.417,10.583C14.5,10.5 14.559,10.41 14.594,10.313C14.628,10.215 14.646,10.111 14.646,10C14.646,9.889 14.628,9.785 14.594,9.688C14.559,9.59 14.5,9.5 14.417,9.417L12.604,7.604C12.521,7.521 12.427,7.458 12.323,7.417C12.219,7.375 12.115,7.354 12.01,7.354C11.906,7.354 11.802,7.375 11.698,7.417C11.594,7.458 11.5,7.521 11.417,7.604C11.25,7.771 11.167,7.965 11.167,8.188C11.167,8.41 11.25,8.604 11.417,8.771L12.646,10ZM4.167,17.5C3.708,17.5 3.316,17.337 2.99,17.01C2.663,16.684 2.5,16.292 2.5,15.833V4.167C2.5,3.708 2.663,3.316 2.99,2.99C3.316,2.663 3.708,2.5 4.167,2.5H15.833C16.292,2.5 16.684,2.663 17.01,2.99C17.337,3.316 17.5,3.708 17.5,4.167V15.833C17.5,16.292 17.337,16.684 17.01,17.01C16.684,17.337 16.292,17.5 15.833,17.5H4.167ZM4.167,15.833H15.833V4.167H4.167V15.833Z"
android:fillColor="#656D77"/> android:fillColor="@android:color/white"/>
</vector> </vector>

View file

@ -20,6 +20,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:pathData="M21.829,13.085 L6.259,20.867c-1.049,0.525 -2.141,-0.601 -1.628,-1.627 0,0 1.93,-3.897 2.461,-4.918 0.531,-1.021 1.138,-1.197 6.781,-1.927 0.209,-0.027 0.38,-0.185 0.38,-0.395 0,-0.21 -0.171,-0.368 -0.38,-0.395C8.23,10.876 7.622,10.699 7.091,9.678c-0.531,-1.02 -2.461,-4.918 -2.461,-4.918 -0.513,-1.026 0.579,-2.152 1.628,-1.627L21.829,10.915c0.894,0.446 0.894,1.723 0,2.17z" android:pathData="M12.207,5.293C12.598,5.683 12.598,6.317 12.207,6.707L7.914,11H18.5C19.052,11 19.5,11.448 19.5,12C19.5,12.552 19.052,13 18.5,13H7.914L12.207,17.293C12.598,17.683 12.598,18.317 12.207,18.707C11.817,19.098 11.183,19.098 10.793,18.707L4.793,12.707C4.402,12.317 4.402,11.683 4.793,11.293L10.793,5.293C11.183,4.902 11.817,4.902 12.207,5.293Z"
android:fillColor="#ffffff"/> android:fillColor="@android:color/white"/>
</vector> </vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M11.793,5.293C12.183,4.902 12.817,4.902 13.207,5.293L19.207,11.293C19.598,11.683 19.598,12.317 19.207,12.707L13.207,18.707C12.817,19.098 12.183,19.098 11.793,18.707C11.402,18.317 11.402,17.683 11.793,17.293L16.086,13H5.5C4.948,13 4.5,12.552 4.5,12C4.5,11.448 4.948,11 5.5,11H16.086L11.793,6.707C11.402,6.317 11.402,5.683 11.793,5.293Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M17.924,6.617C17.973,6.734 18,6.863 18,6.997C18,6.998 18,7 18,7.001V15C18,15.552 17.552,16 17,16C16.448,16 16,15.552 16,15V9.414L7.707,17.707C7.317,18.098 6.683,18.098 6.293,17.707C5.902,17.317 5.902,16.683 6.293,16.293L14.586,8H9C8.448,8 8,7.552 8,7C8,6.448 8.448,6 9,6H17C17.275,6 17.524,6.111 17.705,6.291C17.706,6.292 17.708,6.294 17.709,6.295C17.804,6.39 17.876,6.5 17.924,6.617Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,22C10.617,22 9.317,21.737 8.1,21.212C6.883,20.688 5.825,19.975 4.925,19.075C4.025,18.175 3.313,17.117 2.787,15.9C2.263,14.683 2,13.383 2,12C2,10.617 2.263,9.317 2.787,8.1C3.313,6.883 4.025,5.825 4.925,4.925C5.825,4.025 6.883,3.313 8.1,2.787C9.317,2.263 10.617,2 12,2C13.383,2 14.683,2.263 15.9,2.787C17.117,3.313 18.175,4.025 19.075,4.925C19.975,5.825 20.688,6.883 21.212,8.1C21.737,9.317 22,10.617 22,12C22,13.383 21.737,14.683 21.212,15.9C20.688,17.117 19.975,18.175 19.075,19.075C18.175,19.975 17.117,20.688 15.9,21.212C14.683,21.737 13.383,22 12,22ZM12,20C14.233,20 16.125,19.225 17.675,17.675C19.225,16.125 20,14.233 20,12C20,11.1 19.854,10.233 19.563,9.4C19.271,8.567 18.85,7.8 18.3,7.1L7.1,18.3C7.8,18.85 8.567,19.271 9.4,19.563C10.233,19.854 11.1,20 12,20ZM5.7,16.9L16.9,5.7C16.2,5.15 15.433,4.729 14.6,4.438C13.767,4.146 12.9,4 12,4C9.767,4 7.875,4.775 6.325,6.325C4.775,7.875 4,9.767 4,12C4,12.9 4.146,13.767 4.438,14.6C4.729,15.433 5.15,16.2 5.7,16.9Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M1.5,21.25L2.95,16.3C2.633,15.617 2.396,14.917 2.238,14.2C2.079,13.483 2,12.75 2,12C2,10.617 2.263,9.317 2.788,8.1C3.313,6.883 4.025,5.825 4.925,4.925C5.825,4.025 6.883,3.313 8.1,2.787C9.317,2.263 10.617,2 12,2C13.383,2 14.683,2.263 15.9,2.787C17.117,3.313 18.175,4.025 19.075,4.925C19.975,5.825 20.688,6.883 21.212,8.1C21.737,9.317 22,10.617 22,12C22,13.383 21.737,14.683 21.212,15.9C20.688,17.117 19.975,18.175 19.075,19.075C18.175,19.975 17.117,20.688 15.9,21.212C14.683,21.737 13.383,22 12,22C11.25,22 10.517,21.921 9.8,21.763C9.083,21.604 8.383,21.367 7.7,21.05L2.75,22.5C2.367,22.617 2.033,22.533 1.75,22.25C1.467,21.967 1.383,21.633 1.5,21.25ZM3.95,20.05L7.15,19.1C7.233,19.067 7.325,19.046 7.425,19.038C7.525,19.029 7.617,19.025 7.7,19.025C7.85,19.025 7.996,19.038 8.138,19.063C8.279,19.087 8.417,19.133 8.55,19.2C9.083,19.467 9.642,19.667 10.225,19.8C10.808,19.933 11.4,20 12,20C14.233,20 16.125,19.225 17.675,17.675C19.225,16.125 20,14.233 20,12C20,9.767 19.225,7.875 17.675,6.325C16.125,4.775 14.233,4 12,4C9.767,4 7.875,4.775 6.325,6.325C4.775,7.875 4,9.767 4,12C4,12.6 4.067,13.192 4.2,13.775C4.333,14.358 4.533,14.917 4.8,15.45C4.917,15.667 4.979,15.896 4.988,16.138C4.996,16.379 4.967,16.617 4.9,16.85L3.95,20.05Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,28 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M19,6H17C16.717,6 16.479,5.904 16.288,5.713C16.096,5.521 16,5.283 16,5C16,4.717 16.096,4.479 16.288,4.287C16.479,4.096 16.717,4 17,4H19V2C19,1.717 19.096,1.479 19.288,1.288C19.479,1.096 19.717,1 20,1C20.283,1 20.521,1.096 20.712,1.288C20.904,1.479 21,1.717 21,2V4H23C23.283,4 23.521,4.096 23.712,4.287C23.904,4.479 24,4.717 24,5C24,5.283 23.904,5.521 23.712,5.713C23.521,5.904 23.283,6 23,6H21V8C21,8.283 20.904,8.521 20.712,8.712C20.521,8.904 20.283,9 20,9C19.717,9 19.479,8.904 19.288,8.712C19.096,8.521 19,8.283 19,8V6Z"
android:fillColor="@android:color/white"/>
<path
android:pathData="M22,17V10.659C21.374,10.88 20.701,11 20,11V17H6C5.47,17 4.961,17.211 4.586,17.586L4,18.172V5H14C14,4.299 14.12,3.626 14.341,3H4C2.895,3 2,3.895 2,5V20.586C2,21.477 3.077,21.923 3.707,21.293L6,19H20C21.105,19 22,18.105 22,17Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,31 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12.712,16.712C12.521,16.904 12.283,17 12,17C11.717,17 11.479,16.904 11.288,16.712C11.096,16.521 11,16.283 11,16C11,15.717 11.096,15.479 11.288,15.288C11.479,15.096 11.717,15 12,15C12.283,15 12.521,15.096 12.712,15.288C12.904,15.479 13,15.717 13,16C13,16.283 12.904,16.521 12.712,16.712Z"
android:fillColor="@android:color/white"/>
<path
android:pathData="M12.712,12.712C12.521,12.904 12.283,13 12,13C11.717,13 11.479,12.904 11.288,12.712C11.096,12.521 11,12.283 11,12V8C11,7.717 11.096,7.479 11.288,7.287C11.479,7.096 11.717,7 12,7C12.283,7 12.521,7.096 12.712,7.287C12.904,7.479 13,7.717 13,8V12C13,12.283 12.904,12.521 12.712,12.712Z"
android:fillColor="@android:color/white"/>
<path
android:pathData="M2.95,16.3C2.633,15.617 2.396,14.917 2.238,14.2C2.079,13.483 2,12.75 2,12C2,10.617 2.263,9.317 2.788,8.1C3.313,6.883 4.025,5.825 4.925,4.925C5.825,4.025 6.883,3.313 8.1,2.787C9.317,2.263 10.617,2 12,2C13.383,2 14.683,2.263 15.9,2.787C17.117,3.313 18.175,4.025 19.075,4.925C19.975,5.825 20.688,6.883 21.212,8.1C21.737,9.317 22,10.617 22,12C22,13.383 21.737,14.683 21.212,15.9C20.688,17.117 19.975,18.175 19.075,19.075C18.175,19.975 17.117,20.688 15.9,21.212C14.683,21.737 13.383,22 12,22C11.25,22 10.517,21.921 9.8,21.763C9.083,21.604 8.383,21.367 7.7,21.05L2.75,22.5C2.367,22.617 2.033,22.533 1.75,22.25C1.467,21.967 1.383,21.633 1.5,21.25L2.95,16.3ZM7.15,19.1C7.233,19.067 7.325,19.046 7.425,19.038C7.525,19.029 7.617,19.025 7.7,19.025C7.85,19.025 7.996,19.038 8.138,19.063C8.279,19.087 8.417,19.133 8.55,19.2C9.083,19.467 9.642,19.667 10.225,19.8C10.808,19.933 11.4,20 12,20C14.233,20 16.125,19.225 17.675,17.675C19.225,16.125 20,14.233 20,12C20,9.767 19.225,7.875 17.675,6.325C16.125,4.775 14.233,4 12,4C9.767,4 7.875,4.775 6.325,6.325C4.775,7.875 4,9.767 4,12C4,12.6 4.067,13.192 4.2,13.775C4.333,14.358 4.533,14.917 4.8,15.45C4.917,15.667 4.979,15.896 4.988,16.138C4.996,16.379 4.967,16.617 4.9,16.85L3.95,20.05L7.15,19.1Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M9.55,17.575C9.417,17.575 9.292,17.554 9.175,17.513C9.058,17.471 8.95,17.4 8.85,17.3L4.55,13C4.367,12.817 4.279,12.579 4.288,12.288C4.296,11.996 4.392,11.758 4.575,11.575C4.758,11.392 4.992,11.3 5.275,11.3C5.558,11.3 5.792,11.392 5.975,11.575L9.55,15.15L18.025,6.675C18.208,6.492 18.446,6.4 18.737,6.4C19.029,6.4 19.267,6.492 19.45,6.675C19.633,6.858 19.725,7.096 19.725,7.388C19.725,7.679 19.633,7.917 19.45,8.1L10.25,17.3C10.15,17.4 10.042,17.471 9.925,17.513C9.808,17.554 9.683,17.575 9.55,17.575Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M10.6,13.8L8.45,11.65C8.267,11.467 8.033,11.375 7.75,11.375C7.467,11.375 7.233,11.467 7.05,11.65C6.867,11.833 6.775,12.067 6.775,12.35C6.775,12.633 6.867,12.867 7.05,13.05L9.9,15.9C10.1,16.1 10.333,16.2 10.6,16.2C10.867,16.2 11.1,16.1 11.3,15.9L16.95,10.25C17.133,10.067 17.225,9.833 17.225,9.55C17.225,9.267 17.133,9.033 16.95,8.85C16.767,8.667 16.533,8.575 16.25,8.575C15.967,8.575 15.733,8.667 15.55,8.85L10.6,13.8ZM12,22C10.617,22 9.317,21.737 8.1,21.212C6.883,20.688 5.825,19.975 4.925,19.075C4.025,18.175 3.313,17.117 2.787,15.9C2.263,14.683 2,13.383 2,12C2,10.617 2.263,9.317 2.787,8.1C3.313,6.883 4.025,5.825 4.925,4.925C5.825,4.025 6.883,3.313 8.1,2.787C9.317,2.263 10.617,2 12,2C13.383,2 14.683,2.263 15.9,2.787C17.117,3.313 18.175,4.025 19.075,4.925C19.975,5.825 20.688,6.883 21.212,8.1C21.737,9.317 22,10.617 22,12C22,13.383 21.737,14.683 21.212,15.9C20.688,17.117 19.975,18.175 19.075,19.075C18.175,19.975 17.117,20.688 15.9,21.212C14.683,21.737 13.383,22 12,22Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,14.95C11.867,14.95 11.742,14.929 11.625,14.887C11.508,14.846 11.4,14.775 11.3,14.675L6.675,10.05C6.492,9.867 6.404,9.638 6.413,9.363C6.421,9.088 6.517,8.858 6.7,8.675C6.883,8.492 7.117,8.4 7.4,8.4C7.683,8.4 7.917,8.492 8.1,8.675L12,12.575L15.925,8.65C16.108,8.467 16.337,8.379 16.612,8.388C16.888,8.396 17.117,8.492 17.3,8.675C17.483,8.858 17.575,9.092 17.575,9.375C17.575,9.658 17.483,9.892 17.3,10.075L12.7,14.675C12.6,14.775 12.492,14.846 12.375,14.887C12.258,14.929 12.133,14.95 12,14.95Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M13.3,17.3L8.7,12.7C8.6,12.6 8.529,12.492 8.487,12.375C8.446,12.258 8.425,12.133 8.425,12C8.425,11.867 8.446,11.742 8.487,11.625C8.529,11.508 8.6,11.4 8.7,11.3L13.3,6.7C13.483,6.517 13.717,6.425 14,6.425C14.283,6.425 14.517,6.517 14.7,6.7C14.883,6.883 14.975,7.117 14.975,7.4C14.975,7.683 14.883,7.917 14.7,8.1L10.8,12L14.7,15.9C14.883,16.083 14.975,16.317 14.975,16.6C14.975,16.883 14.883,17.117 14.7,17.3C14.517,17.483 14.283,17.575 14,17.575C13.717,17.575 13.483,17.483 13.3,17.3Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M8.7,17.3C8.517,17.117 8.425,16.883 8.425,16.6C8.425,16.317 8.517,16.083 8.7,15.9L12.6,12L8.7,8.1C8.517,7.917 8.425,7.683 8.425,7.4C8.425,7.117 8.517,6.883 8.7,6.7C8.883,6.517 9.117,6.425 9.4,6.425C9.683,6.425 9.917,6.517 10.1,6.7L14.7,11.3C14.8,11.4 14.871,11.508 14.913,11.625C14.954,11.742 14.975,11.867 14.975,12C14.975,12.133 14.954,12.258 14.913,12.375C14.871,12.492 14.8,12.6 14.7,12.7L10.1,17.3C9.917,17.483 9.683,17.575 9.4,17.575C9.117,17.575 8.883,17.483 8.7,17.3Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M8.225,8.325C8.042,8.142 7.95,7.9 7.95,7.6C7.95,7.3 8.042,7.058 8.225,6.875L11.3,3.8C11.4,3.7 11.508,3.629 11.625,3.588C11.742,3.546 11.867,3.525 12,3.525C12.133,3.525 12.262,3.546 12.387,3.588C12.512,3.629 12.617,3.7 12.7,3.8L15.8,6.9C15.983,7.083 16.071,7.321 16.063,7.613C16.054,7.904 15.958,8.142 15.775,8.325C15.592,8.508 15.35,8.6 15.05,8.6C14.75,8.6 14.508,8.508 14.325,8.325L12,6L9.65,8.35C9.467,8.533 9.229,8.621 8.937,8.613C8.646,8.604 8.408,8.508 8.225,8.325ZM12,20.575C11.867,20.575 11.742,20.55 11.625,20.5C11.508,20.45 11.4,20.383 11.3,20.3L8.225,17.225C8.042,17.042 7.95,16.8 7.95,16.5C7.95,16.2 8.042,15.958 8.225,15.775C8.408,15.592 8.65,15.5 8.95,15.5C9.25,15.5 9.492,15.592 9.675,15.775L12,18.1L14.35,15.75C14.533,15.567 14.771,15.479 15.063,15.488C15.354,15.496 15.592,15.592 15.775,15.775C15.958,15.958 16.05,16.2 16.05,16.5C16.05,16.8 15.958,17.042 15.775,17.225L12.7,20.3C12.617,20.383 12.512,20.45 12.387,20.5C12.262,20.55 12.133,20.575 12,20.575Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6.293,6.293C6.683,5.902 7.317,5.902 7.707,6.293L12,10.586L16.293,6.293C16.683,5.902 17.317,5.902 17.707,6.293C18.098,6.683 18.098,7.317 17.707,7.707L13.414,12L17.707,16.293C18.098,16.683 18.098,17.317 17.707,17.707C17.317,18.098 16.683,18.098 16.293,17.707L12,13.414L7.707,17.707C7.317,18.098 6.683,18.098 6.293,17.707C5.902,17.317 5.902,16.683 6.293,16.293L10.586,12L6.293,7.707C5.902,7.317 5.902,6.683 6.293,6.293Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M4,18C3.45,18 2.979,17.804 2.588,17.413C2.196,17.021 2,16.55 2,16V5C2,4.45 2.196,3.979 2.588,3.588C2.979,3.196 3.45,3 4,3H20C20.55,3 21.021,3.196 21.413,3.588C21.804,3.979 22,4.45 22,5V16C22,16.55 21.804,17.021 21.413,17.413C21.021,17.804 20.55,18 20,18H4ZM4,16H20V5H4V16ZM2,21C1.717,21 1.479,20.904 1.288,20.712C1.096,20.521 1,20.283 1,20C1,19.717 1.096,19.479 1.288,19.288C1.479,19.096 1.717,19 2,19H22C22.283,19 22.521,19.096 22.712,19.288C22.904,19.479 23,19.717 23,20C23,20.283 22.904,20.521 22.712,20.712C22.521,20.904 22.283,21 22,21H2Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M7,21C6.45,21 5.979,20.804 5.588,20.413C5.196,20.021 5,19.55 5,19V6C4.717,6 4.479,5.904 4.287,5.713C4.096,5.521 4,5.283 4,5C4,4.717 4.096,4.479 4.287,4.287C4.479,4.096 4.717,4 5,4H9C9,3.717 9.096,3.479 9.288,3.287C9.479,3.096 9.717,3 10,3H14C14.283,3 14.521,3.096 14.712,3.287C14.904,3.479 15,3.717 15,4H19C19.283,4 19.521,4.096 19.712,4.287C19.904,4.479 20,4.717 20,5C20,5.283 19.904,5.521 19.712,5.713C19.521,5.904 19.283,6 19,6V19C19,19.55 18.804,20.021 18.413,20.413C18.021,20.804 17.55,21 17,21H7ZM7,6V19H17V6H7ZM9,16C9,16.283 9.096,16.521 9.288,16.712C9.479,16.904 9.717,17 10,17C10.283,17 10.521,16.904 10.712,16.712C10.904,16.521 11,16.283 11,16V9C11,8.717 10.904,8.479 10.712,8.288C10.521,8.096 10.283,8 10,8C9.717,8 9.479,8.096 9.288,8.288C9.096,8.479 9,8.717 9,9V16ZM13,16C13,16.283 13.096,16.521 13.288,16.712C13.479,16.904 13.717,17 14,17C14.283,17 14.521,16.904 14.712,16.712C14.904,16.521 15,16.283 15,16V9C15,8.717 14.904,8.479 14.712,8.288C14.521,8.096 14.283,8 14,8C13.717,8 13.479,8.096 13.288,8.288C13.096,8.479 13,8.717 13,9V16Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,15.575C11.867,15.575 11.742,15.554 11.625,15.512C11.508,15.471 11.4,15.4 11.3,15.3L7.7,11.7C7.517,11.517 7.425,11.283 7.425,11C7.425,10.717 7.517,10.483 7.7,10.3C7.883,10.117 8.121,10.021 8.413,10.012C8.704,10.004 8.942,10.092 9.125,10.275L11,12.15V5C11,4.717 11.096,4.479 11.288,4.287C11.479,4.096 11.717,4 12,4C12.283,4 12.521,4.096 12.712,4.287C12.904,4.479 13,4.717 13,5V12.15L14.875,10.275C15.058,10.092 15.296,10.004 15.587,10.012C15.879,10.021 16.117,10.117 16.3,10.3C16.483,10.483 16.575,10.717 16.575,11C16.575,11.283 16.483,11.517 16.3,11.7L12.7,15.3C12.6,15.4 12.492,15.471 12.375,15.512C12.258,15.554 12.133,15.575 12,15.575ZM6,20C5.45,20 4.979,19.804 4.588,19.413C4.196,19.021 4,18.55 4,18V16C4,15.717 4.096,15.479 4.287,15.288C4.479,15.096 4.717,15 5,15C5.283,15 5.521,15.096 5.713,15.288C5.904,15.479 6,15.717 6,16V18H18V16C18,15.717 18.096,15.479 18.288,15.288C18.479,15.096 18.717,15 19,15C19.283,15 19.521,15.096 19.712,15.288C19.904,15.479 20,15.717 20,16V18C20,18.55 19.804,19.021 19.413,19.413C19.021,19.804 18.55,20 18,20H6Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M9,20C8.45,20 7.979,19.804 7.588,19.413C7.196,19.021 7,18.55 7,18C7,17.45 7.196,16.979 7.588,16.587C7.979,16.196 8.45,16 9,16C9.55,16 10.021,16.196 10.413,16.587C10.804,16.979 11,17.45 11,18C11,18.55 10.804,19.021 10.413,19.413C10.021,19.804 9.55,20 9,20ZM15,20C14.45,20 13.979,19.804 13.587,19.413C13.196,19.021 13,18.55 13,18C13,17.45 13.196,16.979 13.587,16.587C13.979,16.196 14.45,16 15,16C15.55,16 16.021,16.196 16.413,16.587C16.804,16.979 17,17.45 17,18C17,18.55 16.804,19.021 16.413,19.413C16.021,19.804 15.55,20 15,20ZM9,14C8.45,14 7.979,13.804 7.588,13.413C7.196,13.021 7,12.55 7,12C7,11.45 7.196,10.979 7.588,10.587C7.979,10.196 8.45,10 9,10C9.55,10 10.021,10.196 10.413,10.587C10.804,10.979 11,11.45 11,12C11,12.55 10.804,13.021 10.413,13.413C10.021,13.804 9.55,14 9,14ZM15,14C14.45,14 13.979,13.804 13.587,13.413C13.196,13.021 13,12.55 13,12C13,11.45 13.196,10.979 13.587,10.587C13.979,10.196 14.45,10 15,10C15.55,10 16.021,10.196 16.413,10.587C16.804,10.979 17,11.45 17,12C17,12.55 16.804,13.021 16.413,13.413C16.021,13.804 15.55,14 15,14ZM9,8C8.45,8 7.979,7.804 7.588,7.412C7.196,7.021 7,6.55 7,6C7,5.45 7.196,4.979 7.588,4.588C7.979,4.196 8.45,4 9,4C9.55,4 10.021,4.196 10.413,4.588C10.804,4.979 11,5.45 11,6C11,6.55 10.804,7.021 10.413,7.412C10.021,7.804 9.55,8 9,8ZM15,8C14.45,8 13.979,7.804 13.587,7.412C13.196,7.021 13,6.55 13,6C13,5.45 13.196,4.979 13.587,4.588C13.979,4.196 14.45,4 15,4C15.55,4 16.021,4.196 16.413,4.588C16.804,4.979 17,5.45 17,6C17,6.55 16.804,7.021 16.413,7.412C16.021,7.804 15.55,8 15,8Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,25 @@
<!--
~ Copyright (c) 2023 New Vector Ltd
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M5,15C4.717,15 4.479,14.904 4.287,14.712C4.096,14.521 4,14.283 4,14C4,13.717 4.096,13.479 4.287,13.288C4.479,13.096 4.717,13 5,13H19C19.283,13 19.521,13.096 19.712,13.288C19.904,13.479 20,13.717 20,14C20,14.283 19.904,14.521 19.712,14.712C19.521,14.904 19.283,15 19,15H5ZM5,11C4.717,11 4.479,10.904 4.287,10.712C4.096,10.521 4,10.283 4,10C4,9.717 4.096,9.479 4.287,9.288C4.479,9.096 4.717,9 5,9H19C19.283,9 19.521,9.096 19.712,9.288C19.904,9.479 20,9.717 20,10C20,10.283 19.904,10.521 19.712,10.712C19.521,10.904 19.283,11 19,11H5Z"
android:fillColor="@android:color/white"/>
</vector>

Some files were not shown because too many files have changed in this diff Show more