Skip to content

Commit 4114a66

Browse files
authored
🔨 Refactor GeneralIconButton to use IconButtonColors instead of iconColor (#3736)
1 parent 86ca183 commit 4114a66

File tree

12 files changed

+88
-45
lines changed

12 files changed

+88
-45
lines changed

app/src/commonMain/kotlin/com/crosspaste/ui/base/Buttons.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ package com.crosspaste.ui.base
22

33
import androidx.compose.material3.IconButtonColors
44
import androidx.compose.material3.IconButtonDefaults
5-
import androidx.compose.material3.LocalContentColor
65
import androidx.compose.runtime.Composable
76
import androidx.compose.ui.Modifier
8-
import androidx.compose.ui.graphics.Color
97
import androidx.compose.ui.graphics.Shape
108
import androidx.compose.ui.graphics.painter.Painter
119
import androidx.compose.ui.graphics.vector.ImageVector
@@ -20,7 +18,6 @@ expect fun GeneralIconButton(
2018
colors: IconButtonColors = IconButtonDefaults.iconButtonColors(),
2119
modifier: Modifier = Modifier,
2220
iconModifier: Modifier = Modifier,
23-
iconColor: Color = LocalContentColor.current,
2421
buttonSize: Dp = xxLarge,
2522
iconSize: Dp = large,
2623
shape: Shape = IconButtonDefaults.standardShape,
@@ -34,7 +31,6 @@ expect fun GeneralIconButton(
3431
colors: IconButtonColors = IconButtonDefaults.iconButtonColors(),
3532
modifier: Modifier = Modifier,
3633
iconModifier: Modifier = Modifier,
37-
iconColor: Color = LocalContentColor.current,
3834
buttonSize: Dp = xxLarge,
3935
iconSize: Dp = large,
4036
shape: Shape = IconButtonDefaults.standardShape,

app/src/commonMain/kotlin/com/crosspaste/ui/devices/DeviceActionButton.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ fun DeviceScope.DeviceActionButton(
6565
desc = "refresh",
6666
colors =
6767
IconButtonDefaults.iconButtonColors(
68-
containerColor = MaterialTheme.colorScheme.primaryContainer,
69-
contentColor = MaterialTheme.colorScheme.onPrimaryContainer,
68+
containerColor = MaterialTheme.colorScheme.errorContainer,
69+
contentColor = MaterialTheme.colorScheme.onErrorContainer,
7070
),
7171
iconModifier =
7272
Modifier.graphicsLayer {

app/src/commonMain/kotlin/com/crosspaste/ui/devices/DeviceDetailHeaderView.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@ fun DeviceScope.DeviceDetailHeaderView() {
1111
var refreshing by remember { mutableStateOf(false) }
1212
DeviceRowContent(
1313
style = myDeviceDetailStyle,
14-
tagContent = { SyncStateTag(refreshing) },
1514
trailingContent = {
16-
DeviceActionButton(refreshing) {
17-
refreshing = it
18-
}
15+
SyncStateTag(refreshing)
1916
},
2017
)
2118
}

app/src/commonMain/kotlin/com/crosspaste/ui/devices/DeviceRowContent.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ import androidx.compose.foundation.layout.size
1212
import androidx.compose.material3.Card
1313
import androidx.compose.material3.CardDefaults
1414
import androidx.compose.material3.Icon
15-
import androidx.compose.material3.MaterialTheme
1615
import androidx.compose.material3.Text
1716
import androidx.compose.runtime.Composable
1817
import androidx.compose.runtime.remember
1918
import androidx.compose.ui.Alignment
2019
import androidx.compose.ui.Modifier
20+
import androidx.compose.ui.text.font.FontWeight
2121
import androidx.compose.ui.text.style.TextOverflow
22+
import androidx.compose.ui.unit.sp
2223
import com.crosspaste.ui.base.PlatformIcon
2324
import com.crosspaste.ui.theme.AppUISize
2425
import com.crosspaste.ui.theme.AppUISize.small2XRoundedCornerShape
@@ -30,7 +31,6 @@ import com.crosspaste.ui.theme.AppUISize.xxxxLarge
3031
fun PlatformScope.DeviceRowContent(
3132
style: DeviceStyle,
3233
onClick: (() -> Unit)? = null,
33-
tagContent: @Composable (() -> Unit)? = null,
3434
trailingContent: @Composable (() -> Unit)? = null,
3535
) {
3636
val interactionSource = remember { MutableInteractionSource() }
@@ -78,7 +78,7 @@ fun PlatformScope.DeviceRowContent(
7878
painter = PlatformIcon(platform),
7979
contentDescription = null,
8080
modifier = Modifier.size(xLarge),
81-
tint = style.iconContentColor,
81+
tint = SyncStateColor(),
8282
)
8383
}
8484

@@ -94,20 +94,20 @@ fun PlatformScope.DeviceRowContent(
9494
Text(
9595
modifier = Modifier.weight(1f, fill = false),
9696
text = getDeviceDisplayName(),
97+
fontSize = 15.sp,
98+
fontWeight = FontWeight.SemiBold,
9799
maxLines = 1,
98100
overflow = TextOverflow.Ellipsis,
99-
style = MaterialTheme.typography.titleMedium,
100-
color = style.contentColor,
101+
color = style.titleColor,
101102
)
102-
tagContent?.invoke()
103103
}
104104

105105
Text(
106106
text = "${platform.name} ${platform.version}",
107+
fontSize = 12.sp,
107108
maxLines = 1,
108109
overflow = TextOverflow.Ellipsis,
109-
style = MaterialTheme.typography.bodyMedium,
110-
color = style.contentColor.copy(alpha = 0.7f),
110+
color = style.subtitleColor,
111111
)
112112
}
113113

app/src/commonMain/kotlin/com/crosspaste/ui/devices/DeviceStateView.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import androidx.compose.material.icons.filled.Warning
1313
import androidx.compose.material3.MaterialTheme
1414
import androidx.compose.runtime.Composable
1515
import androidx.compose.runtime.ReadOnlyComposable
16+
import androidx.compose.ui.graphics.Color
1617
import com.crosspaste.db.sync.SyncState
1718
import com.crosspaste.ui.LocalThemeExtState
1819
import com.crosspaste.ui.base.StateTagStyle
@@ -108,6 +109,35 @@ val refreshingStateStyle
108109
icon = Icons.Default.Refresh,
109110
)
110111

112+
@Composable
113+
fun PlatformScope.SyncStateColor(): Color =
114+
if (this is DeviceScope) {
115+
val state = syncRuntimeInfo.connectState
116+
if (state == SyncState.CONNECTED) {
117+
if (syncRuntimeInfo.allowSend && syncRuntimeInfo.allowReceive) {
118+
LocalThemeExtState.current.success.color
119+
} else if (syncRuntimeInfo.allowSend) {
120+
LocalThemeExtState.current.info.color
121+
} else if (syncRuntimeInfo.allowReceive) {
122+
LocalThemeExtState.current.info.color
123+
} else {
124+
LocalThemeExtState.current.neutral.color
125+
}
126+
} else if (state == SyncState.DISCONNECTED) {
127+
MaterialTheme.colorScheme.error
128+
} else if (state == SyncState.UNMATCHED) {
129+
LocalThemeExtState.current.warning.color
130+
} else if (state == SyncState.UNVERIFIED) {
131+
LocalThemeExtState.current.info.color
132+
} else if (state == SyncState.INCOMPATIBLE) {
133+
MaterialTheme.colorScheme.error
134+
} else {
135+
LocalThemeExtState.current.warning.color
136+
}
137+
} else {
138+
LocalThemeExtState.current.info.color
139+
}
140+
111141
@Composable
112142
fun DeviceScope.SyncStateTag(refreshing: Boolean) {
113143
val state = syncRuntimeInfo.connectState

app/src/commonMain/kotlin/com/crosspaste/ui/devices/NotFoundNearByDevices.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import androidx.compose.ui.Modifier
1919
import androidx.compose.ui.text.style.LineBreak
2020
import androidx.compose.ui.text.style.TextAlign
2121
import com.crosspaste.i18n.GlobalCopywriter
22+
import com.crosspaste.ui.LocalThemeExtState
2223
import com.crosspaste.ui.theme.AppUISize.enormous
2324
import com.crosspaste.ui.theme.AppUISize.medium
2425
import com.crosspaste.ui.theme.AppUISize.tiny
@@ -45,7 +46,7 @@ fun NotFoundNearByDevices() {
4546
imageVector = Icons.Outlined.WifiFind,
4647
contentDescription = null,
4748
modifier = Modifier.size(enormous),
48-
tint = MaterialTheme.colorScheme.primary.copy(alpha = 0.4f),
49+
tint = LocalThemeExtState.current.info.container,
4950
)
5051
Spacer(modifier = Modifier.height(medium))
5152
Text(

app/src/commonMain/kotlin/com/crosspaste/ui/devices/PlatformScope.kt

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.ui.graphics.Color
88
import androidx.compose.ui.graphics.RectangleShape
99
import androidx.compose.ui.graphics.Shape
1010
import com.crosspaste.platform.Platform
11+
import com.crosspaste.ui.LocalThemeExtState
1112
import com.crosspaste.ui.theme.AppUISize.medium
1213
import com.crosspaste.ui.theme.AppUISize.mediumRoundedCornerShape
1314

@@ -22,7 +23,8 @@ data class DeviceStyle(
2223
val containerColor: Color,
2324
val contentColor: Color,
2425
val iconContainerColor: Color,
25-
val iconContentColor: Color,
26+
val titleColor: Color,
27+
val subtitleColor: Color,
2628
val paddingValues: PaddingValues = PaddingValues(medium),
2729
val shape: Shape = mediumRoundedCornerShape,
2830
val isClickable: Boolean = true,
@@ -32,20 +34,22 @@ val myDeviceStyle: DeviceStyle
3234
@Composable @ReadOnlyComposable
3335
get() =
3436
DeviceStyle(
35-
containerColor = MaterialTheme.colorScheme.primaryContainer,
36-
contentColor = MaterialTheme.colorScheme.onPrimaryContainer,
37-
iconContainerColor = MaterialTheme.colorScheme.onPrimaryContainer.copy(alpha = 0.1f),
38-
iconContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
37+
containerColor = MaterialTheme.colorScheme.surfaceVariant,
38+
contentColor = MaterialTheme.colorScheme.onSurfaceVariant,
39+
iconContainerColor = MaterialTheme.colorScheme.background,
40+
titleColor = MaterialTheme.colorScheme.onBackground,
41+
subtitleColor = MaterialTheme.colorScheme.onSurfaceVariant,
3942
)
4043

4144
val myDeviceDetailStyle: DeviceStyle
4245
@Composable @ReadOnlyComposable
4346
get() =
4447
DeviceStyle(
45-
containerColor = MaterialTheme.colorScheme.primaryContainer,
46-
contentColor = MaterialTheme.colorScheme.onPrimaryContainer,
47-
iconContainerColor = MaterialTheme.colorScheme.onPrimaryContainer.copy(alpha = 0.1f),
48-
iconContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
48+
containerColor = MaterialTheme.colorScheme.surfaceVariant,
49+
contentColor = MaterialTheme.colorScheme.onSurfaceVariant,
50+
iconContainerColor = MaterialTheme.colorScheme.background,
51+
titleColor = MaterialTheme.colorScheme.onBackground,
52+
subtitleColor = MaterialTheme.colorScheme.onSurfaceVariant,
4953
isClickable = false,
5054
)
5155

@@ -55,8 +59,9 @@ val tokenDeviceStyle: DeviceStyle
5559
DeviceStyle(
5660
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,
5761
contentColor = MaterialTheme.colorScheme.onSecondaryContainer,
58-
iconContainerColor = MaterialTheme.colorScheme.onSecondaryContainer.copy(alpha = 0.1f),
59-
iconContentColor = MaterialTheme.colorScheme.onSecondaryContainer,
62+
iconContainerColor = MaterialTheme.colorScheme.background,
63+
titleColor = MaterialTheme.colorScheme.onBackground,
64+
subtitleColor = MaterialTheme.colorScheme.onSurfaceVariant,
6065
paddingValues = PaddingValues(),
6166
shape = RectangleShape,
6267
isClickable = false,
@@ -67,7 +72,8 @@ val nearbyDeviceStyle: DeviceStyle
6772
get() =
6873
DeviceStyle(
6974
containerColor = MaterialTheme.colorScheme.surfaceContainer,
70-
contentColor = MaterialTheme.colorScheme.onSecondaryContainer,
71-
iconContainerColor = MaterialTheme.colorScheme.onSecondaryContainer.copy(alpha = 0.1f),
72-
iconContentColor = MaterialTheme.colorScheme.onSecondaryContainer,
75+
contentColor = LocalThemeExtState.current.info.color,
76+
iconContainerColor = MaterialTheme.colorScheme.background,
77+
titleColor = MaterialTheme.colorScheme.onBackground,
78+
subtitleColor = MaterialTheme.colorScheme.onSurfaceVariant,
7379
)

app/src/desktopMain/kotlin/com/crosspaste/ui/MainWindow.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.foundation.window.WindowDraggableArea
99
import androidx.compose.material.icons.Icons
1010
import androidx.compose.material.icons.filled.PushPin
1111
import androidx.compose.material.icons.outlined.PushPin
12+
import androidx.compose.material3.IconButtonDefaults
1213
import androidx.compose.material3.MaterialTheme
1314
import androidx.compose.runtime.Composable
1415
import androidx.compose.runtime.DisposableEffect
@@ -19,6 +20,7 @@ import androidx.compose.runtime.mutableStateOf
1920
import androidx.compose.runtime.remember
2021
import androidx.compose.ui.Alignment
2122
import androidx.compose.ui.Modifier
23+
import androidx.compose.ui.graphics.Color
2224
import androidx.compose.ui.graphics.painter.Painter
2325
import com.crosspaste.app.DesktopAppLaunchState
2426
import com.crosspaste.app.DesktopAppSize
@@ -102,7 +104,11 @@ fun MainWindow(windowIcon: Painter?) {
102104
Icons.Outlined.PushPin
103105
},
104106
desc = "always_on_top",
105-
iconColor = MaterialTheme.colorScheme.onSurface,
107+
colors =
108+
IconButtonDefaults.iconButtonColors(
109+
containerColor = Color.Transparent,
110+
contentColor = MaterialTheme.colorScheme.onSurface,
111+
),
106112
buttonSize = xxLarge,
107113
iconSize = large2X,
108114
shape = tiny2XRoundedCornerShape,

app/src/desktopMain/kotlin/com/crosspaste/ui/base/Buttons.desktop.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import androidx.compose.material3.TooltipDefaults.rememberTooltipPositionProvide
1313
import androidx.compose.material3.rememberTooltipState
1414
import androidx.compose.runtime.Composable
1515
import androidx.compose.ui.Modifier
16-
import androidx.compose.ui.graphics.Color
1716
import androidx.compose.ui.graphics.Shape
1817
import androidx.compose.ui.graphics.painter.Painter
1918
import androidx.compose.ui.graphics.vector.ImageVector
@@ -28,7 +27,6 @@ actual fun GeneralIconButton(
2827
colors: IconButtonColors,
2928
modifier: Modifier,
3029
iconModifier: Modifier,
31-
iconColor: Color,
3230
buttonSize: Dp,
3331
iconSize: Dp,
3432
shape: Shape,
@@ -46,7 +44,6 @@ actual fun GeneralIconButton(
4644
imageVector = imageVector,
4745
contentDescription = desc,
4846
modifier = iconModifier.size(iconSize),
49-
tint = iconColor,
5047
)
5148
}
5249
}
@@ -58,7 +55,6 @@ actual fun GeneralIconButton(
5855
colors: IconButtonColors,
5956
modifier: Modifier,
6057
iconModifier: Modifier,
61-
iconColor: Color,
6258
buttonSize: Dp,
6359
iconSize: Dp,
6460
shape: Shape,
@@ -76,7 +72,6 @@ actual fun GeneralIconButton(
7672
painter = painter,
7773
contentDescription = desc,
7874
modifier = iconModifier.size(iconSize),
79-
tint = iconColor,
8075
)
8176
}
8277
}

app/src/desktopMain/kotlin/com/crosspaste/ui/devices/DesktopDeviceScope.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,12 @@ class DesktopDeviceScope(
2929
navigationManager.navigate(DeviceDetail(syncRuntimeInfo.appInstanceId))
3030
},
3131
style = myDeviceStyle,
32-
tagContent = {
33-
SyncStateTag(refreshing)
34-
},
3532
trailingContent = {
3633
Row(
3734
horizontalArrangement = Arrangement.spacedBy(tiny),
3835
verticalAlignment = Alignment.CenterVertically,
3936
) {
37+
SyncStateTag(refreshing)
4038
DeviceActionButton(refreshing) {
4139
refreshing = it
4240
}

0 commit comments

Comments
 (0)