Skip to content

Commit 978b0ad

Browse files
authored
Merge pull request #2275 from DimensionDev/bugfix/favicon
update favicon
2 parents a2299ca + 29899a4 commit 978b0ad

19 files changed

Lines changed: 306 additions & 77 deletions

File tree

app/src/main/java/dev/dimension/flare/ui/screen/article/ArticleScreen.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ import dev.dimension.flare.ui.model.takeSuccess
9292
import dev.dimension.flare.ui.presenter.article.ArticlePresenter
9393
import dev.dimension.flare.ui.presenter.invoke
9494
import dev.dimension.flare.ui.render.UiDateTime
95+
import dev.dimension.flare.ui.route.DeeplinkRoute
9596
import dev.dimension.flare.ui.route.Route
97+
import dev.dimension.flare.ui.route.toUri
9698
import dev.dimension.flare.ui.theme.isLightTheme
9799
import dev.dimension.flare.ui.theme.screenHorizontalPadding
98100
import io.ktor.http.Url
@@ -128,6 +130,12 @@ internal fun ArticleScreen(
128130
}
129131
val listState = rememberLazyListState()
130132
val uriHandler = LocalUriHandler.current
133+
val openExternalUrl =
134+
remember(uriHandler) {
135+
{ url: String ->
136+
uriHandler.openUri(DeeplinkRoute.OpenLinkDirectly(url).toUri())
137+
}
138+
}
131139
val context = LocalContext.current
132140
val downloadScope = koinInject<CoroutineScope>()
133141
val mediaDownloadManager = koinInject<AndroidDownloadManager>()
@@ -246,7 +254,7 @@ internal fun ArticleScreen(
246254
IconButton(
247255
enabled = sourceUrl != null,
248256
onClick = {
249-
sourceUrl?.let(uriHandler::openUri)
257+
sourceUrl?.let(openExternalUrl)
250258
},
251259
) {
252260
FAIcon(
@@ -294,7 +302,7 @@ internal fun ArticleScreen(
294302
onTitleMeasured = {
295303
titleHeightPx = it
296304
},
297-
onOpenUrl = uriHandler::openUri,
305+
onOpenUrl = openExternalUrl,
298306
onDownloadFile = { file ->
299307
downloadArticleFile(
300308
block = file,

app/src/main/java/dev/dimension/flare/ui/screen/compose/ComposeScreen.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ import dev.dimension.flare.ui.model.UiProfile
108108
import dev.dimension.flare.ui.model.UiState
109109
import dev.dimension.flare.ui.model.UiTimelineV2
110110
import dev.dimension.flare.ui.model.brandIcon
111+
import dev.dimension.flare.ui.model.contentPostOrNull
111112
import dev.dimension.flare.ui.model.map
112113
import dev.dimension.flare.ui.model.mapNotNull
113114
import dev.dimension.flare.ui.model.onError
@@ -684,8 +685,8 @@ internal fun ComposeScreen(
684685

685686
state.state.replyState?.let { replyState ->
686687
replyState.onSuccess { state ->
687-
val content = state as? UiTimelineV2.Post
688-
if (content is UiTimelineV2.Post) {
688+
val content = state.contentPostOrNull()
689+
if (content != null) {
689690
Card {
690691
CompositionLocalProvider(
691692
LocalTimelineAppearance provides

app/src/main/java/dev/dimension/flare/ui/screen/media/StatusMediaScreen.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ import dev.dimension.flare.ui.humanizer.humanize
126126
import dev.dimension.flare.ui.model.UiMedia
127127
import dev.dimension.flare.ui.model.UiState
128128
import dev.dimension.flare.ui.model.UiTimelineV2
129+
import dev.dimension.flare.ui.model.contentPostOrNull
129130
import dev.dimension.flare.ui.model.isSuccess
130131
import dev.dimension.flare.ui.model.onLoading
131132
import dev.dimension.flare.ui.model.onSuccess
@@ -180,7 +181,7 @@ internal fun StatusMediaScreen(
180181
accountType = accountType,
181182
)
182183
}
183-
val status = state.status.takeSuccess() as? UiTimelineV2.Post
184+
val status = state.status.takeSuccess()?.contentPostOrNull()
184185
MediaViewerScreen(
185186
medias = state.medias,
186187
initialIndex = index,
@@ -1394,7 +1395,8 @@ private fun statusMediaPresenter(
13941395
.onSuccess {
13951396
medias =
13961397
UiState.Success(
1397-
(it as? UiTimelineV2.Post)
1398+
it
1399+
.contentPostOrNull()
13981400
?.images
13991401
.orEmpty()
14001402
.toImmutableList(),

app/src/main/java/dev/dimension/flare/ui/screen/profile/ProfileScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ import dev.dimension.flare.ui.model.UiRelation
9595
import dev.dimension.flare.ui.model.UiStrings
9696
import dev.dimension.flare.ui.model.UiTimelineV2
9797
import dev.dimension.flare.ui.model.asText
98+
import dev.dimension.flare.ui.model.contentPostOrNull
9899
import dev.dimension.flare.ui.model.map
99100
import dev.dimension.flare.ui.model.onError
100101
import dev.dimension.flare.ui.model.onLoading
@@ -718,8 +719,7 @@ private fun ProfileMediaTab(
718719
.clip(MaterialTheme.shapes.medium)
719720
.clipToBounds()
720721
.clickable {
721-
val content = item.status
722-
if (content is UiTimelineV2.Post) {
722+
item.status.contentPostOrNull()?.let { content ->
723723
when (content.mediaClickPolicy) {
724724
UiTimelineV2.Post.MediaClickPolicy.OpenStatusMedia -> {
725725
onItemClicked(

app/src/main/java/dev/dimension/flare/ui/screen/rss/RssSourceEditSheet.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
1111
import androidx.compose.foundation.layout.padding
1212
import androidx.compose.foundation.layout.size
1313
import androidx.compose.foundation.rememberScrollState
14+
import androidx.compose.foundation.shape.RoundedCornerShape
1415
import androidx.compose.foundation.text.KeyboardOptions
1516
import androidx.compose.foundation.text.input.TextFieldLineLimits
1617
import androidx.compose.foundation.text.input.delete
@@ -37,6 +38,7 @@ import androidx.compose.runtime.setValue
3738
import androidx.compose.runtime.snapshotFlow
3839
import androidx.compose.ui.Alignment
3940
import androidx.compose.ui.Modifier
41+
import androidx.compose.ui.draw.clip
4042
import androidx.compose.ui.focus.FocusRequester
4143
import androidx.compose.ui.focus.focusRequester
4244
import androidx.compose.ui.res.stringResource
@@ -203,7 +205,10 @@ internal fun RssSourceEditSheet(
203205
NetworkImage(
204206
it,
205207
contentDescription = null,
206-
modifier = Modifier.size(24.dp),
208+
modifier =
209+
Modifier
210+
.size(24.dp)
211+
.clip(RoundedCornerShape(4.dp)),
207212
)
208213
}
209214
},
@@ -331,7 +336,10 @@ internal fun RssSourceEditSheet(
331336
NetworkImage(
332337
source.favIcon,
333338
contentDescription = null,
334-
modifier = Modifier.size(24.dp),
339+
modifier =
340+
Modifier
341+
.size(24.dp)
342+
.clip(RoundedCornerShape(4.dp)),
335343
)
336344
},
337345
content = {
@@ -385,7 +393,10 @@ internal fun RssSourceEditSheet(
385393
NetworkImage(
386394
it,
387395
contentDescription = null,
388-
modifier = Modifier.size(24.dp),
396+
modifier =
397+
Modifier
398+
.size(24.dp)
399+
.clip(RoundedCornerShape(4.dp)),
389400
)
390401
}
391402
},

appleApp/Shared/FlareAppleCore/Sources/FlareAppleUI/EditRssSheet.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public struct EditRssSheet: View {
8686
if let favIcon = rssFeed.icon, !favIcon.isEmpty {
8787
NetworkImage(data: favIcon)
8888
.frame(width: 24, height: 24)
89+
.clipShape(RoundedRectangle(cornerRadius: 4, style: .continuous))
8990
} else {
9091
Image(fontAwesome: .squareRss)
9192
}
@@ -358,6 +359,7 @@ private struct SelectableSubscriptionTypeRow: View {
358359
if let icon, !icon.isEmpty {
359360
NetworkImage(data: icon)
360361
.frame(width: 24, height: 24)
362+
.clipShape(RoundedRectangle(cornerRadius: 4, style: .continuous))
361363
} else {
362364
Image(fontAwesome: .squareRss)
363365
}

appleApp/Shared/FlareAppleCore/Sources/FlareAppleUI/TabIcon.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import FlareAppleCore
22
import KotlinSharedUI
33
import SwiftUI
44

5+
private let faviconCornerRadius: CGFloat = 4
6+
57
public struct TimelineTabTitle: View {
68
private let title: UiText
79

@@ -40,6 +42,7 @@ public struct TabIcon: View {
4042
case .url(let url):
4143
NetworkImage(data: url.url)
4244
.frame(width: size, height: size)
45+
.clipShape(RoundedRectangle(cornerRadius: faviconCornerRadius, style: .continuous))
4346
case .mixed(let mixed):
4447
if iconOnly {
4548
MaterialTabIcon(icon: mixed.icon)
@@ -62,6 +65,7 @@ public struct TabIcon: View {
6265
case .favIcon(let favIcon):
6366
FavTabIcon(host: favIcon.host)
6467
.frame(width: size, height: size)
68+
.clipShape(RoundedRectangle(cornerRadius: faviconCornerRadius, style: .continuous))
6569
}
6670
}
6771
}
@@ -120,6 +124,7 @@ public struct FavTabIcon: View {
120124
public var body: some View {
121125
StateView(state: presenter.state) { url in
122126
NetworkImage(data: .init(url))
127+
.clipShape(RoundedRectangle(cornerRadius: faviconCornerRadius, style: .continuous))
123128
} loadingContent: {
124129
Image(fontAwesome: .globe)
125130
.resizable()

appleApp/Shared/FlareAppleCore/Sources/FlareAppleUI/UiRssView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public struct UiRssView: View {
2121
if let favIcon = data.favIcon, !favIcon.isEmpty {
2222
NetworkImage(data: favIcon)
2323
.frame(width: 24, height: 24)
24+
.clipShape(RoundedRectangle(cornerRadius: 4, style: .continuous))
2425
} else {
2526
Image(fontAwesome: .squareRss)
2627
}

compose-ui/src/commonMain/kotlin/dev/dimension/flare/ui/component/TabIcon.kt

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import androidx.compose.foundation.layout.Box
55
import androidx.compose.foundation.layout.padding
66
import androidx.compose.foundation.layout.size
77
import androidx.compose.foundation.shape.CircleShape
8+
import androidx.compose.foundation.shape.RoundedCornerShape
89
import androidx.compose.runtime.Composable
910
import androidx.compose.runtime.getValue
1011
import androidx.compose.runtime.remember
1112
import androidx.compose.ui.Alignment
1213
import androidx.compose.ui.Modifier
14+
import androidx.compose.ui.draw.clip
1315
import androidx.compose.ui.graphics.Color
1416
import androidx.compose.ui.layout.ContentScale
1517
import androidx.compose.ui.text.TextStyle
@@ -86,6 +88,8 @@ import moe.tlaster.precompose.molecule.producePresenter
8688
import org.jetbrains.compose.resources.StringResource
8789
import org.jetbrains.compose.resources.stringResource
8890

91+
private val FavIconShape = RoundedCornerShape(4.dp)
92+
8993
@Composable
9094
public fun Text(
9195
text: UiText,
@@ -223,7 +227,8 @@ public fun TabIcon(
223227
contentDescription = text,
224228
modifier =
225229
modifier
226-
.size(size),
230+
.size(size)
231+
.clip(FavIconShape),
227232
contentScale = ContentScale.Fit,
228233
)
229234
}
@@ -260,15 +265,19 @@ public fun FavIcon(
260265
},
261266
modifier =
262267
modifier
263-
.size(size),
268+
.size(size)
269+
.clip(FavIconShape),
264270
contentScale = ContentScale.Fit,
265271
)
266272
}.onLoading {
267-
AvatarComponent(
268-
null,
269-
size = size,
270-
modifier = Modifier.placeholder(true),
271-
)
273+
Box(
274+
modifier =
275+
modifier
276+
.size(size)
277+
.clip(FavIconShape)
278+
.placeholder(true),
279+
) {
280+
}
272281
}
273282
}
274283

compose-ui/src/commonMain/kotlin/dev/dimension/flare/ui/screen/login/ServiceSelectionScreenContent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState
1919
import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
2020
import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan
2121
import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridState
22+
import androidx.compose.foundation.shape.RoundedCornerShape
2223
import androidx.compose.foundation.text.KeyboardOptions
2324
import androidx.compose.foundation.text.input.TextFieldLineLimits
2425
import androidx.compose.foundation.text.input.rememberTextFieldState
@@ -757,7 +758,10 @@ private fun ServiceSelectItem(
757758
NetworkImage(
758759
instance.iconUrl,
759760
contentDescription = null,
760-
modifier = Modifier.size(24.dp),
761+
modifier =
762+
Modifier
763+
.size(24.dp)
764+
.clip(RoundedCornerShape(4.dp)),
761765
)
762766
} else if (instance != null) {
763767
FAIcon(

0 commit comments

Comments
 (0)