Remove PreferenceText, replace by ListItem.
This commit is contained in:
parent
0ab1e564df
commit
b0cd9905ce
10 changed files with 117 additions and 280 deletions
|
|
@ -11,16 +11,17 @@ 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.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import io.element.android.compound.theme.ElementTheme
|
|
||||||
import io.element.android.features.lockscreen.impl.R
|
import io.element.android.features.lockscreen.impl.R
|
||||||
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.preferences.PreferenceCategory
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceDivider
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceDivider
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
|
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.ListItemStyle
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun LockScreenSettingsView(
|
fun LockScreenSettingsView(
|
||||||
|
|
@ -35,15 +36,19 @@ fun LockScreenSettingsView(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
) {
|
) {
|
||||||
PreferenceCategory(showTopDivider = false) {
|
PreferenceCategory(showTopDivider = false) {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = stringResource(id = R.string.screen_app_lock_settings_change_pin),
|
headlineContent = {
|
||||||
onClick = onChangePinClick
|
Text(stringResource(id = R.string.screen_app_lock_settings_change_pin))
|
||||||
|
},
|
||||||
|
onClick = onChangePinClick,
|
||||||
)
|
)
|
||||||
PreferenceDivider()
|
PreferenceDivider()
|
||||||
if (state.showRemovePinOption) {
|
if (state.showRemovePinOption) {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = stringResource(id = R.string.screen_app_lock_settings_remove_pin),
|
headlineContent = {
|
||||||
tintColor = ElementTheme.colors.textCriticalPrimary,
|
Text(stringResource(id = R.string.screen_app_lock_settings_remove_pin))
|
||||||
|
},
|
||||||
|
style = ListItemStyle.Destructive,
|
||||||
onClick = {
|
onClick = {
|
||||||
state.eventSink(LockScreenSettingsEvents.OnRemovePin)
|
state.eventSink(LockScreenSettingsEvents.OnRemovePin)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,10 @@ import androidx.compose.ui.Modifier
|
||||||
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 io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
|
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -31,13 +32,17 @@ fun AboutView(
|
||||||
title = stringResource(id = CommonStrings.common_about)
|
title = stringResource(id = CommonStrings.common_about)
|
||||||
) {
|
) {
|
||||||
state.elementLegals.forEach { elementLegal ->
|
state.elementLegals.forEach { elementLegal ->
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = stringResource(id = elementLegal.titleRes),
|
headlineContent = {
|
||||||
|
Text(stringResource(id = elementLegal.titleRes))
|
||||||
|
},
|
||||||
onClick = { onElementLegalClick(elementLegal) }
|
onClick = { onElementLegalClick(elementLegal) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = stringResource(id = CommonStrings.common_open_source_licenses),
|
headlineContent = {
|
||||||
|
Text(stringResource(id = CommonStrings.common_open_source_licenses))
|
||||||
|
},
|
||||||
onClick = onOpenSourceLicensesClick,
|
onClick = onOpenSourceLicensesClick,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,23 +7,30 @@
|
||||||
|
|
||||||
package io.element.android.features.preferences.impl.developer
|
package io.element.android.features.preferences.impl.developer
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.size
|
||||||
|
import androidx.compose.foundation.progressSemantics
|
||||||
import androidx.compose.foundation.text.KeyboardOptions
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
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 androidx.compose.ui.text.input.KeyboardType
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
import io.element.android.features.preferences.impl.R
|
import io.element.android.features.preferences.impl.R
|
||||||
import io.element.android.features.preferences.impl.developer.tracing.LogLevelItem
|
import io.element.android.features.preferences.impl.developer.tracing.LogLevelItem
|
||||||
import io.element.android.features.rageshake.api.preferences.RageshakePreferencesView
|
import io.element.android.features.rageshake.api.preferences.RageshakePreferencesView
|
||||||
|
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceDropdown
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceDropdown
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
|
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceTextField
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceTextField
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
import io.element.android.libraries.featureflag.ui.FeatureListView
|
import io.element.android.libraries.featureflag.ui.FeatureListView
|
||||||
import io.element.android.libraries.featureflag.ui.model.FeatureUiModel
|
import io.element.android.libraries.featureflag.ui.model.FeatureUiModel
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
@ -57,13 +64,15 @@ fun DeveloperSettingsView(
|
||||||
selectedOption = state.tracingLogLevel.dataOrNull(),
|
selectedOption = state.tracingLogLevel.dataOrNull(),
|
||||||
options = LogLevelItem.entries.toPersistentList(),
|
options = LogLevelItem.entries.toPersistentList(),
|
||||||
onSelectOption = { logLevel ->
|
onSelectOption = { logLevel ->
|
||||||
state.eventSink(DeveloperSettingsEvents.SetTracingLogLevel(logLevel))
|
state.eventSink(DeveloperSettingsEvents.SetTracingLogLevel(logLevel))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
PreferenceCategory(title = "Showkase") {
|
PreferenceCategory(title = "Showkase") {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = "Open Showkase browser",
|
headlineContent = {
|
||||||
|
Text("Open Showkase browser")
|
||||||
|
},
|
||||||
onClick = onOpenShowkase
|
onClick = onOpenShowkase
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -71,17 +80,31 @@ fun DeveloperSettingsView(
|
||||||
state = state.rageshakeState,
|
state = state.rageshakeState,
|
||||||
)
|
)
|
||||||
PreferenceCategory(title = "Crash", showTopDivider = false) {
|
PreferenceCategory(title = "Crash", showTopDivider = false) {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = "Crash the app 💥",
|
headlineContent = {
|
||||||
|
Text("Crash the app 💥")
|
||||||
|
},
|
||||||
onClick = { error("This crash is a test.") }
|
onClick = { error("This crash is a test.") }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
val cache = state.cacheSize
|
val cache = state.cacheSize
|
||||||
PreferenceCategory(title = "Cache", showTopDivider = false) {
|
PreferenceCategory(title = "Cache", showTopDivider = false) {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = "Clear cache",
|
headlineContent = {
|
||||||
currentValue = cache.dataOrNull(),
|
Text("Clear cache")
|
||||||
loadingCurrentValue = state.cacheSize.isLoading() || state.clearCacheAction.isLoading(),
|
},
|
||||||
|
trailingContent = if (state.cacheSize.isLoading() || state.clearCacheAction.isLoading()) {
|
||||||
|
ListItemContent.Custom {
|
||||||
|
CircularProgressIndicator(
|
||||||
|
modifier = Modifier
|
||||||
|
.progressSemantics()
|
||||||
|
.size(20.dp),
|
||||||
|
strokeWidth = 2.dp
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ListItemContent.Text(cache.dataOrNull().orEmpty())
|
||||||
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
if (state.clearCacheAction.isLoading().not()) {
|
if (state.clearCacheAction.isLoading().not()) {
|
||||||
state.eventSink(DeveloperSettingsEvents.ClearCache)
|
state.eventSink(DeveloperSettingsEvents.ClearCache)
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,10 @@ import io.element.android.libraries.designsystem.components.list.ListItemContent
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
|
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
|
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.IconSource
|
||||||
import io.element.android.libraries.designsystem.theme.components.ListItem
|
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||||
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.OnLifecycleEvent
|
import io.element.android.libraries.designsystem.utils.OnLifecycleEvent
|
||||||
|
|
@ -109,13 +109,19 @@ private fun NotificationSettingsContentView(
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val systemSettings: NotificationSettingsState.AppSettings = state.appSettings
|
val systemSettings: NotificationSettingsState.AppSettings = state.appSettings
|
||||||
if (systemSettings.appNotificationsEnabled && !systemSettings.systemNotificationsEnabled) {
|
if (systemSettings.appNotificationsEnabled && !systemSettings.systemNotificationsEnabled) {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
icon = CompoundIcons.NotificationsOffSolid(),
|
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.NotificationsOffSolid())),
|
||||||
title = stringResource(id = R.string.screen_notification_settings_system_notifications_turned_off),
|
headlineContent = {
|
||||||
subtitle = stringResource(
|
Text(stringResource(id = R.string.screen_notification_settings_system_notifications_turned_off))
|
||||||
id = R.string.screen_notification_settings_system_notifications_action_required,
|
},
|
||||||
stringResource(id = R.string.screen_notification_settings_system_notifications_action_required_content_link)
|
supportingContent = {
|
||||||
),
|
Text(
|
||||||
|
stringResource(
|
||||||
|
id = R.string.screen_notification_settings_system_notifications_action_required,
|
||||||
|
stringResource(id = R.string.screen_notification_settings_system_notifications_action_required_content_link)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
context.startNotificationSettingsIntent()
|
context.startNotificationSettingsIntent()
|
||||||
}
|
}
|
||||||
|
|
@ -131,10 +137,14 @@ private fun NotificationSettingsContentView(
|
||||||
if (systemSettings.appNotificationsEnabled) {
|
if (systemSettings.appNotificationsEnabled) {
|
||||||
if (!state.fullScreenIntentPermissionsState.permissionGranted) {
|
if (!state.fullScreenIntentPermissionsState.permissionGranted) {
|
||||||
PreferenceCategory {
|
PreferenceCategory {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
icon = CompoundIcons.VoiceCallSolid(),
|
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.VoiceCallSolid())),
|
||||||
title = stringResource(id = R.string.full_screen_intent_banner_title),
|
headlineContent = {
|
||||||
subtitle = stringResource(R.string.full_screen_intent_banner_message),
|
Text(stringResource(id = R.string.full_screen_intent_banner_title))
|
||||||
|
},
|
||||||
|
supportingContent = {
|
||||||
|
Text(stringResource(R.string.full_screen_intent_banner_message))
|
||||||
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
state.fullScreenIntentPermissionsState.openFullScreenIntentSettings()
|
state.fullScreenIntentPermissionsState.openFullScreenIntentSettings()
|
||||||
}
|
}
|
||||||
|
|
@ -142,15 +152,22 @@ private fun NotificationSettingsContentView(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PreferenceCategory(title = stringResource(id = R.string.screen_notification_settings_notification_section_title)) {
|
PreferenceCategory(title = stringResource(id = R.string.screen_notification_settings_notification_section_title)) {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = stringResource(id = R.string.screen_notification_settings_group_chats),
|
headlineContent = {
|
||||||
subtitle = getTitleForRoomNotificationMode(mode = matrixSettings.defaultGroupNotificationMode),
|
Text(stringResource(id = R.string.screen_notification_settings_group_chats))
|
||||||
|
},
|
||||||
|
supportingContent = {
|
||||||
|
Text(getTitleForRoomNotificationMode(mode = matrixSettings.defaultGroupNotificationMode))
|
||||||
|
},
|
||||||
onClick = onGroupChatsClick
|
onClick = onGroupChatsClick
|
||||||
)
|
)
|
||||||
|
ListItem(
|
||||||
PreferenceText(
|
headlineContent = {
|
||||||
title = stringResource(id = R.string.screen_notification_settings_direct_chats),
|
Text(stringResource(id = R.string.screen_notification_settings_direct_chats))
|
||||||
subtitle = getTitleForRoomNotificationMode(mode = matrixSettings.defaultOneToOneNotificationMode),
|
},
|
||||||
|
supportingContent = {
|
||||||
|
Text(getTitleForRoomNotificationMode(mode = matrixSettings.defaultOneToOneNotificationMode))
|
||||||
|
},
|
||||||
onClick = onDirectChatsClick
|
onClick = onDirectChatsClick
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -180,9 +197,10 @@ private fun NotificationSettingsContentView(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
PreferenceCategory(title = stringResource(id = R.string.troubleshoot_notifications_entry_point_section)) {
|
PreferenceCategory(title = stringResource(id = R.string.troubleshoot_notifications_entry_point_section)) {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
modifier = Modifier,
|
headlineContent = {
|
||||||
title = stringResource(id = R.string.troubleshoot_notifications_entry_point_title),
|
Text(stringResource(id = R.string.troubleshoot_notifications_entry_point_title))
|
||||||
|
},
|
||||||
onClick = onTroubleshootNotificationsClick
|
onClick = onTroubleshootNotificationsClick
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,10 @@ import io.element.android.features.rageshake.api.R
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceSlide
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSlide
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
|
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -52,7 +53,11 @@ fun RageshakePreferencesView(
|
||||||
onValueChange = ::onSensitivityChanged
|
onValueChange = ::onSensitivityChanged
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
PreferenceText(title = "Rageshaking is not supported by your device")
|
ListItem(
|
||||||
|
headlineContent = {
|
||||||
|
Text("Rageshaking is not supported by your device")
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,12 +38,13 @@ import io.element.android.libraries.designsystem.components.preferences.Preferen
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
import io.element.android.libraries.designsystem.components.preferences.PreferencePage
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceRow
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceRow
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
|
|
||||||
import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusNext
|
import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusNext
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
import io.element.android.libraries.designsystem.preview.debugPlaceholderBackground
|
import io.element.android.libraries.designsystem.preview.debugPlaceholderBackground
|
||||||
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.ListItem
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
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.TextFieldValidity
|
import io.element.android.libraries.designsystem.theme.components.TextFieldValidity
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
@ -96,8 +97,10 @@ fun BugReportView(
|
||||||
}
|
}
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(modifier = Modifier.height(16.dp))
|
||||||
PreferenceDivider()
|
PreferenceDivider()
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = stringResource(id = R.string.screen_bug_report_view_logs),
|
headlineContent = {
|
||||||
|
Text(stringResource(id = R.string.screen_bug_report_view_logs))
|
||||||
|
},
|
||||||
enabled = isFormEnabled,
|
enabled = isFormEnabled,
|
||||||
onClick = onViewLogs,
|
onClick = onViewLogs,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,6 @@ import io.element.android.libraries.designsystem.components.button.MainActionBut
|
||||||
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
|
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
|
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
|
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewWithLargeHeight
|
import io.element.android.libraries.designsystem.preview.PreviewWithLargeHeight
|
||||||
|
|
@ -481,10 +480,14 @@ private fun TopicSection(
|
||||||
showTopDivider = false,
|
showTopDivider = false,
|
||||||
) {
|
) {
|
||||||
if (roomTopic is RoomTopicState.CanAddTopic) {
|
if (roomTopic is RoomTopicState.CanAddTopic) {
|
||||||
PreferenceText(
|
ListItem(
|
||||||
title = stringResource(R.string.screen_room_details_add_topic_title),
|
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Plus())),
|
||||||
icon = CompoundIcons.Plus(),
|
headlineContent = {
|
||||||
onClick = { onActionClick(RoomDetailsAction.AddTopic) },
|
Text(stringResource(id = R.string.screen_room_details_add_topic_title))
|
||||||
|
},
|
||||||
|
onClick = {
|
||||||
|
onActionClick(RoomDetailsAction.AddTopic)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
} else if (roomTopic is RoomTopicState.ExistingTopic) {
|
} else if (roomTopic is RoomTopicState.ExistingTopic) {
|
||||||
ClickableLinkText(
|
ClickableLinkText(
|
||||||
|
|
|
||||||
|
|
@ -47,10 +47,6 @@ internal fun PreferenceCategoryPreview() = ElementThemedPreview {
|
||||||
PreferenceCategory(
|
PreferenceCategory(
|
||||||
title = "Category title",
|
title = "Category title",
|
||||||
) {
|
) {
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
)
|
|
||||||
PreferenceSwitch(
|
PreferenceSwitch(
|
||||||
title = "Switch",
|
title = "Switch",
|
||||||
icon = CompoundIcons.Threads(),
|
icon = CompoundIcons.Threads(),
|
||||||
|
|
|
||||||
|
|
@ -97,11 +97,6 @@ internal fun PreferencePagePreview() = ElementPreview {
|
||||||
PreferenceCategory(
|
PreferenceCategory(
|
||||||
title = "Category title",
|
title = "Category title",
|
||||||
) {
|
) {
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
subtitle = "Some other text",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
)
|
|
||||||
PreferenceDivider()
|
PreferenceDivider()
|
||||||
PreferenceSwitch(
|
PreferenceSwitch(
|
||||||
title = "Switch",
|
title = "Switch",
|
||||||
|
|
|
||||||
|
|
@ -1,216 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2023, 2024 New Vector Ltd.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
||||||
* Please see LICENSE files in the repository root for full details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package io.element.android.libraries.designsystem.components.preferences
|
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
|
||||||
import androidx.compose.foundation.layout.Column
|
|
||||||
import androidx.compose.foundation.layout.Row
|
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.foundation.layout.size
|
|
||||||
import androidx.compose.foundation.progressSemantics
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
|
||||||
import androidx.compose.ui.text.AnnotatedString
|
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import io.element.android.compound.theme.ElementTheme
|
|
||||||
import io.element.android.compound.tokens.generated.CompoundIcons
|
|
||||||
import io.element.android.libraries.architecture.coverage.ExcludeFromCoverage
|
|
||||||
import io.element.android.libraries.designsystem.atomic.atoms.RedIndicatorAtom
|
|
||||||
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
|
||||||
import io.element.android.libraries.designsystem.components.preferences.components.preferenceIcon
|
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
|
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
|
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewGroup
|
|
||||||
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
|
|
||||||
import io.element.android.libraries.designsystem.theme.components.ListItem
|
|
||||||
import io.element.android.libraries.designsystem.theme.components.Text
|
|
||||||
import io.element.android.libraries.designsystem.toEnabledColor
|
|
||||||
import io.element.android.libraries.designsystem.toSecondaryEnabledColor
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun PreferenceText(
|
|
||||||
title: String,
|
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
enabled: Boolean = true,
|
|
||||||
subtitle: String? = null,
|
|
||||||
subtitleAnnotated: AnnotatedString? = null,
|
|
||||||
currentValue: String? = null,
|
|
||||||
loadingCurrentValue: Boolean = false,
|
|
||||||
icon: ImageVector? = null,
|
|
||||||
@DrawableRes iconResourceId: Int? = null,
|
|
||||||
showIconAreaIfNoIcon: Boolean = false,
|
|
||||||
showIconBadge: Boolean = false,
|
|
||||||
showEndBadge: Boolean = false,
|
|
||||||
tintColor: Color? = null,
|
|
||||||
onClick: () -> Unit = {},
|
|
||||||
) {
|
|
||||||
ListItem(
|
|
||||||
modifier = modifier,
|
|
||||||
enabled = enabled,
|
|
||||||
onClick = onClick,
|
|
||||||
leadingContent = preferenceIcon(
|
|
||||||
icon = icon,
|
|
||||||
iconResourceId = iconResourceId,
|
|
||||||
showIconBadge = showIconBadge,
|
|
||||||
enabled = enabled,
|
|
||||||
showIconAreaIfNoIcon = showIconAreaIfNoIcon,
|
|
||||||
tintColor = tintColor,
|
|
||||||
),
|
|
||||||
headlineContent = {
|
|
||||||
Text(
|
|
||||||
style = ElementTheme.typography.fontBodyLgRegular,
|
|
||||||
text = title,
|
|
||||||
color = tintColor ?: enabled.toEnabledColor(),
|
|
||||||
)
|
|
||||||
},
|
|
||||||
supportingContent = if (subtitle != null) {
|
|
||||||
{
|
|
||||||
Text(
|
|
||||||
style = ElementTheme.typography.fontBodyMdRegular,
|
|
||||||
text = subtitle,
|
|
||||||
color = tintColor ?: enabled.toSecondaryEnabledColor(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
subtitleAnnotated?.let {
|
|
||||||
{
|
|
||||||
Text(
|
|
||||||
style = ElementTheme.typography.fontBodyMdRegular,
|
|
||||||
text = it,
|
|
||||||
color = tintColor ?: enabled.toSecondaryEnabledColor(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
trailingContent = if (currentValue != null || loadingCurrentValue || showEndBadge) {
|
|
||||||
ListItemContent.Custom {
|
|
||||||
Row(
|
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
|
||||||
) {
|
|
||||||
if (currentValue != null) {
|
|
||||||
Text(
|
|
||||||
text = currentValue,
|
|
||||||
style = ElementTheme.typography.fontBodyXsMedium,
|
|
||||||
color = enabled.toSecondaryEnabledColor(),
|
|
||||||
)
|
|
||||||
} else if (loadingCurrentValue) {
|
|
||||||
CircularProgressIndicator(
|
|
||||||
modifier = Modifier
|
|
||||||
.progressSemantics()
|
|
||||||
.size(20.dp),
|
|
||||||
strokeWidth = 2.dp
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (showEndBadge) {
|
|
||||||
val endBadgeStartPadding = if (currentValue != null || loadingCurrentValue) 16.dp else 0.dp
|
|
||||||
RedIndicatorAtom(
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(start = endBadgeStartPadding)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Preview(group = PreviewGroup.Preferences)
|
|
||||||
@Composable
|
|
||||||
internal fun PreferenceTextLightPreview() = ElementPreviewLight {
|
|
||||||
ContentToPreview(showEndBadge = false)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Preview(group = PreviewGroup.Preferences)
|
|
||||||
@Composable
|
|
||||||
internal fun PreferenceTextDarkPreview() = ElementPreviewDark {
|
|
||||||
ContentToPreview(showEndBadge = false)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Preview(group = PreviewGroup.Preferences)
|
|
||||||
@Composable
|
|
||||||
internal fun PreferenceTextWithEndBadgeLightPreview() = ElementPreviewLight {
|
|
||||||
ContentToPreview(showEndBadge = true)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Preview(group = PreviewGroup.Preferences)
|
|
||||||
@Composable
|
|
||||||
internal fun PreferenceTextWithEndBadgeDarkPreview() = ElementPreviewDark {
|
|
||||||
ContentToPreview(showEndBadge = true)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExcludeFromCoverage
|
|
||||||
@Composable
|
|
||||||
private fun ContentToPreview(showEndBadge: Boolean) {
|
|
||||||
Column(
|
|
||||||
verticalArrangement = Arrangement.spacedBy(2.dp)
|
|
||||||
) {
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
subtitle = "Some content",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
subtitle = "Some content",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
currentValue = "123",
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
subtitle = "Some content",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
currentValue = "123",
|
|
||||||
enabled = false,
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
subtitle = "Some content",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
loadingCurrentValue = true,
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
currentValue = "123",
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title",
|
|
||||||
icon = CompoundIcons.ChatProblem(),
|
|
||||||
loadingCurrentValue = true,
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title no icon with icon area",
|
|
||||||
showIconAreaIfNoIcon = true,
|
|
||||||
loadingCurrentValue = true,
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
PreferenceText(
|
|
||||||
title = "Title no icon",
|
|
||||||
loadingCurrentValue = true,
|
|
||||||
showEndBadge = showEndBadge,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue