ui: what's new in v7.1-beta.8 (#7953)
* ui: what's new in v7.1 * ui: v7.1 what's new wording, moderator icon and badge item style * ui: better calls in v7.1 what's new * ui: phone icon for better calls in v7.1 what's new * ui: v7.1 what's new preview screenshots * ui: even gap below the supporter badge in v7.1 what's new * ui: supporter badge picture rises above its text in v7.1 what's new * ui: v7.1 what's new preview screenshots with the badge layout * ui: v7.1 what's new desktop screenshot after the master merge * ui: v7.1-beta.8 what's new wording * ui: v7.1-beta.8 what's new: promote contributors to moderators * ci: desktop references of v7.1-beta.8 what's new * ui: v7.1-beta.8 what's new: larger supporter phone aligned by its head * ci: desktop references of the supporter phone placement * ci: iOS references of v7.1-beta.8 what's new --------- Co-authored-by: spacedandy-agents-simplex <342056592+spacedandy-agents-simplex@users.noreply.github.com>
No files matched your search
@@ -698,20 +698,36 @@ private let versionDescriptions: [VersionDescription] = [
|
||||
))
|
||||
]
|
||||
),
|
||||
// TODO [badges] restore when badges ship, with final copy and the Read more link.
|
||||
/*
|
||||
VersionDescription(
|
||||
version: "v7.1",
|
||||
version: "v7.1-beta.8",
|
||||
post: nil,
|
||||
features: [
|
||||
.view(FeatureView(
|
||||
icon: nil,
|
||||
title: "Supporter badge",
|
||||
title: "Supporter badges",
|
||||
view: { SupporterBadgeWhatsNew() }
|
||||
))
|
||||
)),
|
||||
.feature(Description(
|
||||
icon: nil,
|
||||
title: "Safer channels",
|
||||
description: nil,
|
||||
subfeatures: [
|
||||
("flag", "Promote contributors to moderators."),
|
||||
("checkmark.seal", "Opt in to sign all channel messages."),
|
||||
]
|
||||
)),
|
||||
.feature(Description(
|
||||
icon: "terminal",
|
||||
title: "Flat (\"terminal\") chat layout",
|
||||
description: "And full markdown support."
|
||||
)),
|
||||
.feature(Description(
|
||||
icon: "phone",
|
||||
title: "Better calls",
|
||||
description: "Reconnect after dropped connection."
|
||||
)),
|
||||
]
|
||||
),
|
||||
*/
|
||||
]
|
||||
|
||||
private let lastVersion = versionDescriptions.last!.version
|
||||
@@ -731,19 +747,17 @@ fileprivate struct SupporterBadgeWhatsNew: View {
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
|
||||
var body: some View {
|
||||
HStack(alignment: .top, spacing: 12) {
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
Text("Supporter badge ❤️")
|
||||
.font(.title3)
|
||||
.bold()
|
||||
Text("Help keep the network running — send files up to 2 GB.")
|
||||
.multilineTextAlignment(.leading)
|
||||
.lineLimit(10)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
|
||||
heroThumbnail()
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
Text("Supporter badges 🚀")
|
||||
.font(.title3)
|
||||
.bold()
|
||||
Text("Send larger files\navailable for longer.")
|
||||
.multilineTextAlignment(.leading)
|
||||
.lineLimit(10)
|
||||
}
|
||||
.padding(.trailing, 96)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.overlay(alignment: .topTrailing) { heroThumbnail() }
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
@@ -752,7 +766,8 @@ fileprivate struct SupporterBadgeWhatsNew: View {
|
||||
Image(colorScheme == .light ? "phone-supporter" : "phone-supporter-light")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 110, height: 110)
|
||||
.frame(width: 115, height: 144)
|
||||
.offset(x: 23, y: -24)
|
||||
#else
|
||||
Image("badge-supporter")
|
||||
.resizable()
|
||||
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 52 KiB |
@@ -25,6 +25,7 @@ import androidx.compose.ui.input.pointer.PointerIcon
|
||||
import androidx.compose.ui.input.pointer.pointerHoverIcon
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.layout.layout
|
||||
import androidx.compose.ui.layout.onGloballyPositioned
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import dev.icerock.moko.resources.compose.painterResource
|
||||
@@ -969,34 +970,50 @@ private val versionDescriptions: List<VersionDescription> = listOf(
|
||||
),
|
||||
)
|
||||
),
|
||||
// TODO [badges] restore when badges ship, with final copy and the Read more link.
|
||||
/*
|
||||
VersionDescription(
|
||||
version = "v7.1",
|
||||
version = "v7.1-beta.8",
|
||||
post = null,
|
||||
features = listOf(
|
||||
VersionFeature.FeatureView(
|
||||
icon = null,
|
||||
titleId = MR.strings.v7_1_supporter_badge_title,
|
||||
view = { SupporterBadgeWhatsNew() }
|
||||
)
|
||||
),
|
||||
VersionFeature.FeatureDescription(
|
||||
icon = null,
|
||||
titleId = MR.strings.v7_1_channels,
|
||||
descrId = null,
|
||||
subfeatures = listOf(
|
||||
MR.images.ic_flag to MR.strings.v7_1_channels_moderators,
|
||||
MR.images.ic_verified to MR.strings.v7_1_channels_signed_messages,
|
||||
)
|
||||
),
|
||||
VersionFeature.FeatureDescription(
|
||||
icon = MR.images.ic_outline_terminal,
|
||||
titleId = MR.strings.v7_1_terminal_layout,
|
||||
descrId = MR.strings.v7_1_terminal_layout_descr
|
||||
),
|
||||
VersionFeature.FeatureDescription(
|
||||
icon = MR.images.ic_call,
|
||||
titleId = MR.strings.v6_1_better_calls,
|
||||
descrId = MR.strings.v7_1_better_calls_descr
|
||||
),
|
||||
)
|
||||
),
|
||||
*/
|
||||
)
|
||||
|
||||
@Composable
|
||||
private fun SupporterBadgeWhatsNew() {
|
||||
Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.Top) {
|
||||
Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(6.dp)) {
|
||||
Box(Modifier.padding(bottom = 12.dp).fillMaxWidth()) {
|
||||
Column(Modifier.padding(end = 96.dp), verticalArrangement = Arrangement.spacedBy(6.dp)) {
|
||||
Text(
|
||||
stringResource(MR.strings.v7_1_supporter_badge_title),
|
||||
style = MaterialTheme.typography.h3,
|
||||
fontWeight = FontWeight.Bold
|
||||
style = MaterialTheme.typography.h4,
|
||||
fontWeight = FontWeight.Medium
|
||||
)
|
||||
Text(
|
||||
stringResource(MR.strings.v7_1_supporter_badge_body),
|
||||
style = MaterialTheme.typography.body1,
|
||||
fontSize = 15.sp,
|
||||
maxLines = 10
|
||||
)
|
||||
}
|
||||
@@ -1006,19 +1023,24 @@ private fun SupporterBadgeWhatsNew() {
|
||||
painterResource(if (isDark) MR.images.phone_supporter_light else MR.images.phone_supporter),
|
||||
contentDescription = null,
|
||||
contentScale = ContentScale.Fit,
|
||||
modifier = Modifier.size(110.dp)
|
||||
modifier = Modifier.align(Alignment.TopEnd).spill(x = 23.dp, y = (-24).dp).size(width = 115.dp, height = 144.dp)
|
||||
)
|
||||
} else {
|
||||
Image(
|
||||
painterResource(MR.images.badge_supporter),
|
||||
contentDescription = null,
|
||||
contentScale = ContentScale.Fit,
|
||||
modifier = Modifier.size(72.dp)
|
||||
modifier = Modifier.align(Alignment.TopEnd).size(72.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Modifier.spill(x: Dp, y: Dp): Modifier = layout { measurable, constraints ->
|
||||
val placeable = measurable.measure(constraints)
|
||||
layout(0, 0) { placeable.place(x.roundToPx() - placeable.width, y.roundToPx()) }
|
||||
}
|
||||
|
||||
private val lastVersion = versionDescriptions.last().version
|
||||
|
||||
fun setLastVersionDefault(m: ChatModel) {
|
||||
|
||||
@@ -3348,6 +3348,12 @@
|
||||
<string name="badges_renews_on_for">Renews on %1$s for %2$s.</string>
|
||||
<string name="badges_renews_on">Renews on %1$s.</string>
|
||||
<string name="supporter_perks">Supporter perks</string>
|
||||
<string name="v7_1_supporter_badge_title">Supporter badge ❤️</string>
|
||||
<string name="v7_1_supporter_badge_body">Help keep the network running — send files up to 2 GB.</string>
|
||||
<string name="v7_1_supporter_badge_title">Supporter badges 🚀</string>
|
||||
<string name="v7_1_supporter_badge_body">Send larger files\navailable for longer.</string>
|
||||
<string name="v7_1_channels">Safer channels</string>
|
||||
<string name="v7_1_channels_moderators">Promote contributors to moderators.</string>
|
||||
<string name="v7_1_channels_signed_messages">Opt in to sign all channel messages.</string>
|
||||
<string name="v7_1_terminal_layout">Flat ("terminal") chat layout</string>
|
||||
<string name="v7_1_terminal_layout_descr">And full markdown support.</string>
|
||||
<string name="v7_1_better_calls_descr">Reconnect after dropped connection.</string>
|
||||
</resources>
|
||||
|
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 50 KiB |