From 0da91ed9e26f5d9431bd39261dc4f73a11eaccf3 Mon Sep 17 00:00:00 2001 From: Maciej Procyk Date: Thu, 9 May 2024 19:57:01 +0200 Subject: [PATCH] publish favourites --- .../font/PoetsenOne-Regular.ttf | Bin 0 -> 177704 bytes .../kotlin/in/procyk/shin/ShinApp.kt | 63 ++++++++---------- .../procyk/shin/component/ShinAppComponent.kt | 7 -- .../procyk/shin/ui/component/BottomBanner.kt | 44 ++++++++++++ .../in/procyk/shin/ui/component/ShinBanner.kt | 3 + .../shin/ui/component/ShinIconButton.kt | 53 +++++++++++++++ .../procyk/shin/ui/screen/FavouritesScreen.kt | 57 +++++++++++----- .../in/procyk/shin/ui/screen/MainScreen.kt | 4 +- .../kotlin/in/procyk/shin/ui/util/KeyUtil.kt | 5 +- 9 files changed, 174 insertions(+), 62 deletions(-) create mode 100644 composeApp/src/commonMain/composeResources/font/PoetsenOne-Regular.ttf create mode 100644 composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/BottomBanner.kt create mode 100644 composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/ShinIconButton.kt diff --git a/composeApp/src/commonMain/composeResources/font/PoetsenOne-Regular.ttf b/composeApp/src/commonMain/composeResources/font/PoetsenOne-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1a89422d7f8cdde4469cf0f85424f68c1e199476 GIT binary patch literal 177704 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 literal 0 HcmV?d00001 diff --git a/composeApp/src/commonMain/kotlin/in/procyk/shin/ShinApp.kt b/composeApp/src/commonMain/kotlin/in/procyk/shin/ShinApp.kt index 7b69115..e455d6c 100644 --- a/composeApp/src/commonMain/kotlin/in/procyk/shin/ShinApp.kt +++ b/composeApp/src/commonMain/kotlin/in/procyk/shin/ShinApp.kt @@ -4,7 +4,10 @@ import androidx.compose.foundation.background import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Favorite +import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Menu +import androidx.compose.material.icons.filled.QrCodeScanner import androidx.compose.material.icons.outlined.Favorite import androidx.compose.material.icons.outlined.Home import androidx.compose.material.icons.outlined.QrCodeScanner @@ -17,7 +20,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.input.key.onKeyEvent import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.unit.dp import com.arkivanov.decompose.extensions.compose.stack.Children import com.arkivanov.decompose.extensions.compose.stack.animation.slide @@ -27,6 +29,8 @@ import `in`.procyk.compose.camera.permission.rememberCameraPermissionState import `in`.procyk.shin.component.ShinAppComponent import `in`.procyk.shin.component.ShinAppComponent.Child import `in`.procyk.shin.component.ShinAppComponent.MenuItem +import `in`.procyk.shin.ui.component.BottomBanner +import `in`.procyk.shin.ui.component.BottomBannerItem import `in`.procyk.shin.ui.component.ShinBanner import `in`.procyk.shin.ui.icons.Github import `in`.procyk.shin.ui.icons.Html5 @@ -72,10 +76,12 @@ private inline fun NavigationDrawer( val activeMenuItem by component.activeMenuItem.subscribeAsState() ModalNavigationDrawer( modifier = Modifier - .onKeyEvent { event -> - (drawerState.isOpen && event.isEscDown).also { isConsumed -> - if (isConsumed) scope.launch { drawerState.close() } + .onKeyEvent handle@{ event -> + when { + drawerState.isOpen && event.isEscDown -> scope.launch { drawerState.close() } + else -> return@handle false } + return@handle true }, drawerState = drawerState, drawerContent = { @@ -97,7 +103,10 @@ private inline fun NavigationDrawer( ).forEach { item -> NavigationDrawerItem( icon = { - Icon(item.icon, contentDescription = "Menu item icon") + Icon( + if (item == activeMenuItem) item.filledIcon else item.outlinedIcon, + contentDescription = "Menu item icon" + ) }, label = { Text(item.presentableName) @@ -114,23 +123,12 @@ private inline fun NavigationDrawer( Spacer( modifier = Modifier.weight(1f) ) - Column( - modifier = Modifier - .fillMaxWidth() - .padding(bottom = 12.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(8.dp) - ) { - Text("Find Me On") - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterHorizontally) - ) { - FindMeOn(ShinIcons.Github, "https://github.com/avan1235/", "Github") - FindMeOn(ShinIcons.LinkedIn, "https://www.linkedin.com/in/maciej-procyk/", "LinkedIn") - FindMeOn(ShinIcons.Html5, "https://procyk.in", "web") - } - } + BottomBanner( + title = "Find Me On", + BottomBannerItem("https://github.com/avan1235/", ShinIcons.Github), + BottomBannerItem("https://www.linkedin.com/in/maciej-procyk/", ShinIcons.LinkedIn), + BottomBannerItem("https://procyk.in", ShinIcons.Html5), + ) } }, ) { @@ -180,25 +178,20 @@ private inline fun NavigationDrawer( } } -@Composable -private inline fun FindMeOn( - icon: ImageVector, - url: String, - name: String, -) { - val uriHandler = LocalUriHandler.current - IconButton(onClick = { uriHandler.openUri(url) }) { - Icon(icon, "Find me on $name") - } -} - -private inline val MenuItem.icon: ImageVector +private inline val MenuItem.outlinedIcon: ImageVector get() = when (this) { MenuItem.Main -> Icons.Outlined.Home MenuItem.ScanQRCode -> Icons.Outlined.QrCodeScanner MenuItem.Favourites -> Icons.Outlined.Favorite } +private inline val MenuItem.filledIcon: ImageVector + get() = when (this) { + MenuItem.Main -> Icons.Filled.Home + MenuItem.ScanQRCode -> Icons.Filled.QrCodeScanner + MenuItem.Favourites -> Icons.Filled.Favorite + } + private inline val MenuItem.presentableName: String get() = when (this) { MenuItem.Main -> "Home" diff --git a/composeApp/src/commonMain/kotlin/in/procyk/shin/component/ShinAppComponent.kt b/composeApp/src/commonMain/kotlin/in/procyk/shin/component/ShinAppComponent.kt index 26372fb..d88f45f 100644 --- a/composeApp/src/commonMain/kotlin/in/procyk/shin/component/ShinAppComponent.kt +++ b/composeApp/src/commonMain/kotlin/in/procyk/shin/component/ShinAppComponent.kt @@ -14,8 +14,6 @@ interface ShinAppComponent : Component { val activeMenuItem: Value - fun onBackClicked(toIndex: Int) - fun navigateTo(item: MenuItem) enum class MenuItem { @@ -83,11 +81,6 @@ class ShinAppComponentImpl( ) } - - override fun onBackClicked(toIndex: Int) { - navigation.popTo(index = toIndex) - } - override fun navigateTo(item: MenuItem) { when (item) { MenuItem.Main -> navigation.popTo(index = 0) diff --git a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/BottomBanner.kt b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/BottomBanner.kt new file mode 100644 index 0000000..8c25890 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/BottomBanner.kt @@ -0,0 +1,44 @@ +package `in`.procyk.shin.ui.component + +import androidx.compose.foundation.layout.* +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.unit.dp + +data class BottomBannerItem( + val url: String, + val icon: ImageVector, +) { +} + +@Composable +internal fun BottomBanner( + title: String?, + vararg items: BottomBannerItem, +) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 12.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + title?.let { Text(it) } + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterHorizontally) + ) { + val uriHandler = LocalUriHandler.current + for (item in items) { + ShinIconButton( + onClick = { uriHandler.openUri(item.url) }, + icon = item.icon, + ) + } + } + } +} diff --git a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/ShinBanner.kt b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/ShinBanner.kt index df4bf89..f379a33 100644 --- a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/ShinBanner.kt +++ b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/ShinBanner.kt @@ -13,6 +13,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.sp import org.jetbrains.compose.resources.Font import shin.composeapp.generated.resources.Mansalva_Regular +import shin.composeapp.generated.resources.PoetsenOne_Regular import shin.composeapp.generated.resources.Res @Composable @@ -33,6 +34,8 @@ internal fun ShinBanner( ) Text( text = "Shorten Your URL with Kotlin", + fontFamily = FontFamily(Font(Res.font.PoetsenOne_Regular)), + style = LocalTextStyle.current.copy(color = MaterialTheme.colorScheme.onSurface), textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth(), ) diff --git a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/ShinIconButton.kt b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/ShinIconButton.kt new file mode 100644 index 0000000..b8823ff --- /dev/null +++ b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/component/ShinIconButton.kt @@ -0,0 +1,53 @@ +package `in`.procyk.shin.ui.component + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsHoveredAsState +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +@Composable +internal fun ShinIconButton( + onClick: () -> Unit, + icon: ImageVector, + iconOutlined: ImageVector = icon, + contentDescription: String? = null, + size: Dp = 24.dp, + hoveredColor: Color = LocalContentColor.current, + notHoveredColor: Color = hoveredColor.copy(alpha = 0.6f), +) { + val interactionSource = remember { MutableInteractionSource() } + val isHovered by interactionSource.collectIsHoveredAsState() + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .padding(12.dp) + .clickable( + onClick = onClick, + interactionSource = interactionSource, + indication = null, + ) + ) { + Icon( + imageVector = if (isHovered) icon else iconOutlined, + contentDescription = contentDescription, + modifier = Modifier.size(size), + tint = when { + isHovered -> hoveredColor + else -> notHoveredColor + } + ) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/screen/FavouritesScreen.kt b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/screen/FavouritesScreen.kt index ca8e3cf..6a75c64 100644 --- a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/screen/FavouritesScreen.kt +++ b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/screen/FavouritesScreen.kt @@ -4,18 +4,26 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.outlined.Delete -import androidx.compose.material3.* +import androidx.compose.material3.Card +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.arkivanov.decompose.extensions.compose.subscribeAsState import `in`.procyk.shin.component.FavouritesComponent +import `in`.procyk.shin.ui.component.ShinIconButton @Composable internal fun FavouritesScreen(component: FavouritesComponent) { @@ -28,13 +36,16 @@ internal fun FavouritesScreen(component: FavouritesComponent) { Text("No Favourites") } } else { - LazyColumn { + LazyColumn( + contentPadding = PaddingValues(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { items(favourites, key = { it.shortUrl }) { item -> val clipboardManager = LocalClipboardManager.current Card( shape = MaterialTheme.shapes.small, modifier = Modifier - .padding(top = 16.dp, start = 16.dp, end = 16.dp) + .clip(RoundedCornerShape(12.dp)) .clickable { component.onFavouriteClick(clipboardManager, item.shortUrl) } ) { Row( @@ -44,21 +55,35 @@ internal fun FavouritesScreen(component: FavouritesComponent) { horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { - IconButton( - onClick = { component.removeFavourite(item.shortUrl) } + ShinIconButton( + onClick = { component.removeFavourite(item.shortUrl) }, + icon = Icons.Filled.Delete, + iconOutlined = Icons.Outlined.Delete, + contentDescription = "Delete favourite", + hoveredColor = MaterialTheme.colorScheme.error.copy(alpha = 0.5f), + notHoveredColor = LocalContentColor.current, + ) + Row( + modifier = Modifier.fillMaxWidth() ) { - Icon(Icons.Outlined.Delete, contentDescription = "Delete favourite") + Text( + text = item.fullUrl, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.weight(2f), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + Text( + text = item.shortUrl, + style = MaterialTheme.typography.bodyMedium.let { + it.copy(color = it.color.copy(alpha = 0.3f)) + }, + textAlign = TextAlign.End, + modifier = Modifier.weight(1f), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) } - Text( - text = item.fullUrl, - style = MaterialTheme.typography.bodyLarge, - modifier = Modifier.weight(1f) - ) - Text( - text = item.shortUrl, - style = MaterialTheme.typography.bodyMedium, - textAlign = TextAlign.End - ) } } } diff --git a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/screen/MainScreen.kt b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/screen/MainScreen.kt index e8e2d7d..69aa7c5 100644 --- a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/screen/MainScreen.kt +++ b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/screen/MainScreen.kt @@ -9,9 +9,7 @@ import androidx.compose.ui.input.key.onKeyEvent import androidx.compose.ui.unit.dp import `in`.procyk.shin.component.MainComponent import `in`.procyk.shin.shared.applyIf -import `in`.procyk.shin.ui.component.ShinBanner -import `in`.procyk.shin.ui.component.ShortenRequestItems -import `in`.procyk.shin.ui.component.ShortenResponse +import `in`.procyk.shin.ui.component.* import `in`.procyk.shin.ui.util.isEscDown @Composable diff --git a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/util/KeyUtil.kt b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/util/KeyUtil.kt index f2dbf6d..3a99cbb 100644 --- a/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/util/KeyUtil.kt +++ b/composeApp/src/commonMain/kotlin/in/procyk/shin/ui/util/KeyUtil.kt @@ -3,4 +3,7 @@ package `in`.procyk.shin.ui.util import androidx.compose.ui.input.key.* internal val KeyEvent.isEscDown: Boolean - get() = key == Key.Escape && type == KeyEventType.KeyDown + get() = this.key == Key.Escape && this.type == KeyEventType.KeyDown + +internal fun KeyEvent.isKeyDown(key: Key): Boolean = + this.key == key && this.type == KeyEventType.KeyDown