Skip to content

Commit 6c23f5e

Browse files
committed
feat: show site icon
1 parent 61f5f53 commit 6c23f5e

File tree

2 files changed

+46
-4
lines changed

2 files changed

+46
-4
lines changed

app/src/main/java/com/paulcoding/hviewer/model/SiteModel.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,34 @@
11
package com.paulcoding.hviewer.model
22

3+
import androidx.compose.foundation.layout.size
4+
import androidx.compose.foundation.shape.RoundedCornerShape
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.ui.Modifier
7+
import androidx.compose.ui.draw.clip
8+
import androidx.compose.ui.layout.ContentScale
9+
import androidx.compose.ui.unit.Dp
10+
import androidx.compose.ui.unit.dp
11+
import coil3.compose.AsyncImage
12+
313
data class SiteConfig(
414
val baseUrl: String = "",
515
val scriptFile: String = "",
616
val tags: Map<String, String> = mapOf(),
7-
)
17+
) {
18+
private val icon
19+
get() = "https://www.google.com/s2/favicons?sz=64&domain=$baseUrl"
20+
21+
@Composable
22+
fun SiteIcon(size: Dp = 20.dp, clip: Dp = 4.dp) {
23+
AsyncImage(
24+
icon, baseUrl,
25+
modifier = Modifier
26+
.size(size)
27+
.clip(RoundedCornerShape(clip)),
28+
contentScale = ContentScale.Crop,
29+
)
30+
}
31+
}
832

933
data class SiteConfigs(
1034
val version: Int = 1,

app/src/main/java/com/paulcoding/hviewer/ui/page/sites/SitesPage.kt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.paulcoding.hviewer.ui.page.sites
22

33
import androidx.compose.foundation.clickable
4+
import androidx.compose.foundation.layout.Arrangement
45
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.layout.Column
7+
import androidx.compose.foundation.layout.Row
68
import androidx.compose.foundation.layout.Spacer
79
import androidx.compose.foundation.layout.fillMaxSize
810
import androidx.compose.foundation.layout.height
@@ -33,6 +35,7 @@ import com.airbnb.lottie.compose.LottieCompositionSpec
3335
import com.airbnb.lottie.compose.animateLottieCompositionAsState
3436
import com.airbnb.lottie.compose.rememberLottieComposition
3537
import com.paulcoding.hviewer.R
38+
import com.paulcoding.hviewer.model.SiteConfig
3639
import com.paulcoding.hviewer.model.SiteConfigs
3740
import com.paulcoding.hviewer.ui.icon.SettingsIcon
3841
import kotlinx.coroutines.delay
@@ -85,7 +88,6 @@ fun SitesPage(
8588
) {}
8689
Column(
8790
modifier = Modifier
88-
.padding(16.dp)
8991
.fillMaxSize()
9092
.verticalScroll(rememberScrollState())
9193
) {
@@ -96,15 +98,31 @@ fun SitesPage(
9698
Box(modifier = Modifier.clickable {
9799
navToTopics(site)
98100
}) {
99-
Text(site)
101+
siteConfigs.sites[site]?.let { siteConfig ->
102+
Site(
103+
key = site,
104+
site = siteConfig
105+
)
106+
}
100107
}
101108
}
102-
103109
}
104110
}
105111
}
106112
}
107113

114+
@Composable
115+
fun Site(site: SiteConfig, key: String) {
116+
Row(
117+
modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp),
118+
verticalAlignment = Alignment.CenterVertically,
119+
horizontalArrangement = Arrangement.spacedBy(8.dp)
120+
) {
121+
site.SiteIcon()
122+
Text(key)
123+
}
124+
}
125+
108126
@Composable
109127
private fun Empty(navToSettings: () -> Unit) {
110128
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.empty))

0 commit comments

Comments
 (0)