Skip to content

Commit 9e2b24f

Browse files
Feature/compose cleanup (#1543)
* Moving color files * Moving theme classes into their own package * Only obtain new theme when required * UI Tweaks Using the proper color for danger as opposed to one hardcoded color Reusing BlackAlpha40 Using the right delete icon in settings * matching figma * Matching signature across buttons * Dialogs do not have a 'x' button by default * Updated typography Updated the typography in an composition local so it can be accessed from anyehere in compose and matching the figma declarations. * Centered text in control messages * Fixing new color access for action items * renaming spacing to be more general * Unifying dimensions and rectifying design inconsistencies Unifying spacing values and reusing common ones Identified spacing issues and inconsistencies in design and figma * Rounded corners for the new conversation sheet * Rounding sheets corners * Spacing fixes and UI consolidating Discussed with QA to make sure the 'new message' screen should indeed behave as the other screens and use disabled state instead of disappearing * Disappearing messages tweaks Re-using our new radio buttons in disappearing messages Tweaking UI to match designs * Cleaning up spaces * Migrating to Material3 * Fixing UI issues found * PR feedbacks --------- Co-authored-by: bemusementpark <bemusementpark>
1 parent c31e89a commit 9e2b24f

File tree

90 files changed

+1308
-1058
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+1308
-1058
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ dependencies {
381381
implementation "androidx.compose.ui:ui-tooling:$composeVersion"
382382
implementation "androidx.compose.runtime:runtime-livedata:$composeVersion"
383383
implementation "androidx.compose.foundation:foundation-layout:$composeVersion"
384-
implementation "androidx.compose.material:material:$composeVersion"
384+
implementation "androidx.compose.material3:material3:1.2.1"
385385
androidTestImplementation "androidx.compose.ui:ui-test-junit4-android:$composeVersion"
386386
debugImplementation "androidx.compose.ui:ui-test-manifest:$composeVersion"
387387

app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,14 @@ class SessionDialogBuilder(val context: Context) {
114114
options,
115115
) { dialog, it -> onSelect(it); dialog.dismiss() }
116116

117-
fun destructiveButton(
117+
fun dangerButton(
118118
@StringRes text: Int,
119119
@StringRes contentDescription: Int = text,
120120
listener: () -> Unit = {}
121121
) = button(
122122
text,
123123
contentDescription,
124-
R.style.Widget_Session_Button_Dialog_DestructiveText,
124+
R.style.Widget_Session_Button_Dialog_DangerText,
125125
) { listener() }
126126

127127
fun okButton(listener: (() -> Unit) = {}) = button(android.R.string.ok) { listener() }

app/src/main/java/org/thoughtcrime/securesms/components/menu/ActionItem.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.components.menu
22

33
import android.content.Context
44
import androidx.annotation.AttrRes
5-
import androidx.annotation.ColorRes
5+
import androidx.annotation.ColorInt
66

77
/**
88
* Represents an action to be rendered
@@ -13,5 +13,5 @@ data class ActionItem(
1313
val action: Runnable,
1414
val contentDescription: Int? = null,
1515
val subtitle: ((Context) -> CharSequence?)? = null,
16-
@ColorRes val color: Int? = null,
16+
@ColorInt val color: Int? = null,
1717
)

app/src/main/java/org/thoughtcrime/securesms/components/menu/ContextMenuList.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class ContextMenuList(recyclerView: RecyclerView, onItemClick: () -> Unit) {
7878

7979
override fun bind(model: DisplayItem) {
8080
val item = model.item
81-
val color = item.color?.let { ContextCompat.getColor(context, it) }
81+
val color = item.color
8282

8383
if (item.iconRes > 0) {
8484
val typedValue = TypedValue()

app/src/main/java/org/thoughtcrime/securesms/conversation/disappearingmessages/DisappearingMessages.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.session.libsession.utilities.ExpirationUtil
1414
import org.session.libsession.utilities.SSKEnvironment.MessageExpirationManagerProtocol
1515
import org.session.libsession.utilities.TextSecurePreferences
1616
import org.session.libsession.utilities.getExpirationTypeDisplayValue
17-
import org.thoughtcrime.securesms.database.ThreadDatabase
1817
import org.thoughtcrime.securesms.database.model.MessageRecord
1918
import org.thoughtcrime.securesms.showSessionDialog
2019
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
@@ -57,7 +56,7 @@ class DisappearingMessages @Inject constructor(
5756
context.getExpirationTypeDisplayValue(message.isNotDisappearAfterRead)
5857
)
5958
})
60-
destructiveButton(
59+
dangerButton(
6160
text = if (message.expiresIn == 0L) R.string.dialog_disappearing_messages_follow_setting_confirm else R.string.dialog_disappearing_messages_follow_setting_set,
6261
contentDescription = if (message.expiresIn == 0L) R.string.AccessibilityId_confirm else R.string.AccessibilityId_set_button
6362
) {

app/src/main/java/org/thoughtcrime/securesms/conversation/disappearingmessages/ui/Adapter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import kotlin.time.Duration.Companion.seconds
1313

1414
fun State.toUiState() = UiState(
1515
cards = listOfNotNull(
16-
typeOptions()?.let { ExpiryOptionsCard(GetString(R.string.activity_disappearing_messages_delete_type), it) },
17-
timeOptions()?.let { ExpiryOptionsCard(GetString(R.string.activity_disappearing_messages_timer), it) }
16+
typeOptions()?.let { ExpiryOptionsCardData(GetString(R.string.activity_disappearing_messages_delete_type), it) },
17+
timeOptions()?.let { ExpiryOptionsCardData(GetString(R.string.activity_disappearing_messages_timer), it) }
1818
),
1919
showGroupFooter = isGroup && isNewConfigEnabled,
2020
showSetButton = isSelfAdmin

app/src/main/java/org/thoughtcrime/securesms/conversation/disappearingmessages/ui/DisappearingMessages.kt

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ package org.thoughtcrime.securesms.conversation.disappearingmessages.ui
33
import androidx.compose.foundation.layout.Arrangement
44
import androidx.compose.foundation.layout.Box
55
import androidx.compose.foundation.layout.Column
6+
import androidx.compose.foundation.layout.Spacer
67
import androidx.compose.foundation.layout.fillMaxWidth
8+
import androidx.compose.foundation.layout.height
79
import androidx.compose.foundation.layout.padding
810
import androidx.compose.foundation.rememberScrollState
911
import androidx.compose.foundation.verticalScroll
10-
import androidx.compose.material.Text
12+
import androidx.compose.material3.Text
1113
import androidx.compose.runtime.Composable
1214
import androidx.compose.ui.Alignment
1315
import androidx.compose.ui.Modifier
@@ -18,15 +20,15 @@ import androidx.compose.ui.unit.dp
1820
import network.loki.messenger.R
1921
import network.loki.messenger.libsession_util.util.ExpiryMode
2022
import org.thoughtcrime.securesms.ui.Callbacks
21-
import org.thoughtcrime.securesms.ui.LocalDimensions
23+
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
2224
import org.thoughtcrime.securesms.ui.NoOpCallbacks
2325
import org.thoughtcrime.securesms.ui.OptionsCard
2426
import org.thoughtcrime.securesms.ui.RadioOption
25-
import org.thoughtcrime.securesms.ui.color.LocalColors
27+
import org.thoughtcrime.securesms.ui.theme.LocalColors
2628
import org.thoughtcrime.securesms.ui.components.SlimOutlineButton
2729
import org.thoughtcrime.securesms.ui.contentDescription
28-
import org.thoughtcrime.securesms.ui.extraSmall
2930
import org.thoughtcrime.securesms.ui.fadingEdges
31+
import org.thoughtcrime.securesms.ui.theme.LocalType
3032

3133
typealias ExpiryCallbacks = Callbacks<ExpiryMode>
3234
typealias ExpiryRadioOption = RadioOption<ExpiryMode>
@@ -39,26 +41,32 @@ fun DisappearingMessages(
3941
) {
4042
val scrollState = rememberScrollState()
4143

42-
Column(modifier = modifier.padding(horizontal = LocalDimensions.current.margin)) {
44+
Column(modifier = modifier.padding(horizontal = LocalDimensions.current.spacing)) {
4345
Box(modifier = Modifier.weight(1f)) {
4446
Column(
4547
modifier = Modifier
46-
.padding(bottom = 20.dp)
48+
.padding(vertical = LocalDimensions.current.spacing)
4749
.verticalScroll(scrollState)
4850
.fadingEdges(scrollState),
49-
verticalArrangement = Arrangement.spacedBy(LocalDimensions.current.smallItemSpacing)
5051
) {
51-
state.cards.forEach {
52-
OptionsCard(it, callbacks)
52+
state.cards.forEachIndexed { index, option ->
53+
OptionsCard(option, callbacks)
54+
55+
// add spacing if not the last item
56+
if(index != state.cards.lastIndex){
57+
Spacer(modifier = Modifier.height(LocalDimensions.current.spacing))
58+
}
5359
}
5460

5561
if (state.showGroupFooter) Text(
5662
text = stringResource(R.string.activity_disappearing_messages_group_footer),
57-
style = extraSmall,
63+
style = LocalType.current.extraSmall,
5864
fontWeight = FontWeight(400),
5965
color = LocalColors.current.textSecondary,
6066
textAlign = TextAlign.Center,
61-
modifier = Modifier.fillMaxWidth()
67+
modifier = Modifier
68+
.fillMaxWidth()
69+
.padding(top = LocalDimensions.current.xsSpacing)
6270
)
6371
}
6472
}
@@ -68,7 +76,7 @@ fun DisappearingMessages(
6876
modifier = Modifier
6977
.contentDescription(R.string.AccessibilityId_set_button)
7078
.align(Alignment.CenterHorizontally)
71-
.padding(bottom = 20.dp),
79+
.padding(bottom = LocalDimensions.current.spacing),
7280
onClick = callbacks::onSetClick
7381
)
7482
}

app/src/main/java/org/thoughtcrime/securesms/conversation/disappearingmessages/ui/DisappearingMessagesPreview.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import androidx.compose.ui.unit.dp
1010
import network.loki.messenger.libsession_util.util.ExpiryMode
1111
import org.thoughtcrime.securesms.conversation.disappearingmessages.ExpiryType
1212
import org.thoughtcrime.securesms.conversation.disappearingmessages.State
13-
import org.thoughtcrime.securesms.ui.PreviewTheme
14-
import org.thoughtcrime.securesms.ui.color.Colors
15-
import org.thoughtcrime.securesms.ui.SessionColorsParameterProvider
13+
import org.thoughtcrime.securesms.ui.theme.PreviewTheme
14+
import org.thoughtcrime.securesms.ui.theme.ThemeColors
15+
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
1616

1717
@Preview(widthDp = 450, heightDp = 700)
1818
@Composable
@@ -51,7 +51,7 @@ class StatePreviewParameterProvider : PreviewParameterProvider<State> {
5151
@Preview
5252
@Composable
5353
fun PreviewThemes(
54-
@PreviewParameter(SessionColorsParameterProvider::class) colors: Colors
54+
@PreviewParameter(SessionColorsParameterProvider::class) colors: ThemeColors
5555
) {
5656
PreviewTheme(colors) {
5757
DisappearingMessages(

app/src/main/java/org/thoughtcrime/securesms/conversation/disappearingmessages/ui/UiState.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import network.loki.messenger.libsession_util.util.ExpiryMode
55
import org.thoughtcrime.securesms.ui.GetString
66
import org.thoughtcrime.securesms.ui.RadioOption
77

8-
typealias ExpiryOptionsCard = OptionsCard<ExpiryMode>
8+
typealias ExpiryOptionsCardData = OptionsCardData<ExpiryMode>
99

1010
data class UiState(
11-
val cards: List<ExpiryOptionsCard> = emptyList(),
11+
val cards: List<ExpiryOptionsCardData> = emptyList(),
1212
val showGroupFooter: Boolean = false,
1313
val showSetButton: Boolean = true
1414
) {
1515
constructor(
16-
vararg cards: ExpiryOptionsCard,
16+
vararg cards: ExpiryOptionsCardData,
1717
showGroupFooter: Boolean = false,
1818
showSetButton: Boolean = true,
1919
): this(
@@ -23,7 +23,7 @@ data class UiState(
2323
)
2424
}
2525

26-
data class OptionsCard<T>(
26+
data class OptionsCardData<T>(
2727
val title: GetString,
2828
val options: List<RadioOption<T>>
2929
) {

app/src/main/java/org/thoughtcrime/securesms/conversation/start/home/StartConversation.kt

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import androidx.compose.foundation.layout.height
77
import androidx.compose.foundation.layout.padding
88
import androidx.compose.foundation.rememberScrollState
99
import androidx.compose.foundation.verticalScroll
10-
import androidx.compose.material.Surface
11-
import androidx.compose.material.Text
10+
import androidx.compose.material3.MaterialTheme
11+
import androidx.compose.material3.Surface
12+
import androidx.compose.material3.Text
1213
import androidx.compose.runtime.Composable
1314
import androidx.compose.ui.Modifier
1415
import androidx.compose.ui.input.nestedscroll.nestedScroll
@@ -21,23 +22,25 @@ import org.thoughtcrime.securesms.conversation.start.NullStartConversationDelega
2122
import org.thoughtcrime.securesms.conversation.start.StartConversationDelegate
2223
import org.thoughtcrime.securesms.ui.Divider
2324
import org.thoughtcrime.securesms.ui.ItemButton
24-
import org.thoughtcrime.securesms.ui.LocalDimensions
25-
import org.thoughtcrime.securesms.ui.PreviewTheme
26-
import org.thoughtcrime.securesms.ui.SessionColorsParameterProvider
27-
import org.thoughtcrime.securesms.ui.color.Colors
28-
import org.thoughtcrime.securesms.ui.color.LocalColors
25+
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
26+
import org.thoughtcrime.securesms.ui.theme.PreviewTheme
27+
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
28+
import org.thoughtcrime.securesms.ui.theme.ThemeColors
29+
import org.thoughtcrime.securesms.ui.theme.LocalColors
2930
import org.thoughtcrime.securesms.ui.components.AppBar
3031
import org.thoughtcrime.securesms.ui.components.QrImage
3132
import org.thoughtcrime.securesms.ui.contentDescription
32-
import org.thoughtcrime.securesms.ui.small
33-
import org.thoughtcrime.securesms.ui.xl
33+
import org.thoughtcrime.securesms.ui.theme.LocalType
3434

3535
@Composable
3636
internal fun StartConversationScreen(
3737
accountId: String,
3838
delegate: StartConversationDelegate
3939
) {
40-
Column(modifier = Modifier.background(LocalColors.current.backgroundSecondary)) {
40+
Column(modifier = Modifier.background(
41+
LocalColors.current.backgroundSecondary,
42+
shape = MaterialTheme.shapes.small
43+
)) {
4144
AppBar(stringResource(R.string.dialog_start_conversation_title), onClose = delegate::onDialogClosePressed)
4245
Surface(
4346
modifier = Modifier.nestedScroll(rememberNestedScrollInteropConnection()),
@@ -74,18 +77,18 @@ internal fun StartConversationScreen(
7477
)
7578
Column(
7679
modifier = Modifier
77-
.padding(horizontal = LocalDimensions.current.margin)
78-
.padding(top = LocalDimensions.current.itemSpacing)
79-
.padding(bottom = LocalDimensions.current.margin)
80+
.padding(horizontal = LocalDimensions.current.spacing)
81+
.padding(top = LocalDimensions.current.spacing)
82+
.padding(bottom = LocalDimensions.current.spacing)
8083
) {
81-
Text(stringResource(R.string.accountIdYours), style = xl)
82-
Spacer(modifier = Modifier.height(LocalDimensions.current.xxxsItemSpacing))
84+
Text(stringResource(R.string.accountIdYours), style = LocalType.current.xl)
85+
Spacer(modifier = Modifier.height(LocalDimensions.current.xxsSpacing))
8386
Text(
8487
text = stringResource(R.string.qrYoursDescription),
8588
color = LocalColors.current.textSecondary,
86-
style = small
89+
style = LocalType.current.small
8790
)
88-
Spacer(modifier = Modifier.height(LocalDimensions.current.smallItemSpacing))
91+
Spacer(modifier = Modifier.height(LocalDimensions.current.smallSpacing))
8992
QrImage(
9093
string = accountId,
9194
Modifier.contentDescription(R.string.AccessibilityId_qr_code),
@@ -100,7 +103,7 @@ internal fun StartConversationScreen(
100103
@Preview
101104
@Composable
102105
private fun PreviewStartConversationScreen(
103-
@PreviewParameter(SessionColorsParameterProvider::class) colors: Colors
106+
@PreviewParameter(SessionColorsParameterProvider::class) colors: ThemeColors
104107
) {
105108
PreviewTheme(colors) {
106109
StartConversationScreen(

0 commit comments

Comments
 (0)