From d8ce10aa35c7d7f84892c33cac374a17a6e4cae2 Mon Sep 17 00:00:00 2001 From: Debanshu Datta Date: Sat, 25 Jun 2022 19:50:20 +0530 Subject: [PATCH] Refining the UI with Swipe View: Koin Impl --- .../base/components/tabHandler/TabHandler.kt | 6 +- .../components/FollowDeveloperCard.kt | 14 +- .../components/FollowRepositoryCard.kt | 176 ++++++------- .../components/DeveloperCard.kt | 179 ++++++------- .../components/RepositoryCard.kt | 236 +++++++++--------- 5 files changed, 296 insertions(+), 315 deletions(-) diff --git a/app/src/main/java/com/debanshu777/compose_github/ui/base/components/tabHandler/TabHandler.kt b/app/src/main/java/com/debanshu777/compose_github/ui/base/components/tabHandler/TabHandler.kt index 063dfae..8da0873 100644 --- a/app/src/main/java/com/debanshu777/compose_github/ui/base/components/tabHandler/TabHandler.kt +++ b/app/src/main/java/com/debanshu777/compose_github/ui/base/components/tabHandler/TabHandler.kt @@ -35,10 +35,10 @@ fun TabsContent( dataList: List>, navController: NavController ) { - HorizontalPager(state = pagerState, count = pageCount) { page -> + HorizontalPager(state = pagerState, count = pageCount, userScrollEnabled = false) { page -> when (page) { - 0 -> TabLayout(dataList[0], actionList, cardAction,navController) - 1 -> TabLayout(dataList[1], actionList, cardAction,navController) + 0 -> TabLayout(dataList[0], actionList, cardAction, navController) + 1 -> TabLayout(dataList[1], actionList, cardAction, navController) } } } diff --git a/app/src/main/java/com/debanshu777/compose_github/ui/feature_follow/components/FollowDeveloperCard.kt b/app/src/main/java/com/debanshu777/compose_github/ui/feature_follow/components/FollowDeveloperCard.kt index c5646e9..94e1de0 100644 --- a/app/src/main/java/com/debanshu777/compose_github/ui/feature_follow/components/FollowDeveloperCard.kt +++ b/app/src/main/java/com/debanshu777/compose_github/ui/feature_follow/components/FollowDeveloperCard.kt @@ -1,10 +1,8 @@ package com.debanshu777.compose_github.ui.feature_follow.components -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width @@ -28,7 +26,6 @@ import androidx.compose.ui.unit.TextUnitType import androidx.compose.ui.unit.dp import androidx.navigation.NavController import coil.compose.AsyncImage -import com.debanshu777.compose_github.ui.base.Screen import composedb.githubDB.DeveloperFollow import kotlinx.coroutines.Job import me.saket.swipe.SwipeAction @@ -51,11 +48,18 @@ fun FollowDeveloperCard( contentDescription = null, ) }, + isUndo = true, background = MaterialTheme.colorScheme.errorContainer ) - SwipeableActionsBox(endActions = listOf(deleteItem)) { + SwipeableActionsBox( + modifier = Modifier.padding(vertical = 2.5.dp), + swipeThreshold = 150.dp, + endActions = listOf(deleteItem) + ) { ElevatedCard( - modifier = Modifier.height(110.dp).align(Alignment.CenterStart) + modifier = Modifier + .height(110.dp) + .align(Alignment.CenterStart) ) { Row( modifier = Modifier diff --git a/app/src/main/java/com/debanshu777/compose_github/ui/feature_follow/components/FollowRepositoryCard.kt b/app/src/main/java/com/debanshu777/compose_github/ui/feature_follow/components/FollowRepositoryCard.kt index 004b9ed..60cfb22 100644 --- a/app/src/main/java/com/debanshu777/compose_github/ui/feature_follow/components/FollowRepositoryCard.kt +++ b/app/src/main/java/com/debanshu777/compose_github/ui/feature_follow/components/FollowRepositoryCard.kt @@ -6,12 +6,12 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete @@ -43,7 +43,7 @@ import me.saket.swipe.SwipeableActionsBox @OptIn(ExperimentalUnitApi::class, ExperimentalMaterial3Api::class) @Composable -fun FollowRepositoryCard(item: RepositoryFollow,cardAction: (Long) -> Job) { +fun FollowRepositoryCard(item: RepositoryFollow, cardAction: (Long) -> Job) { val deleteItem = SwipeAction( onSwipe = { cardAction(item.id) }, icon = { @@ -53,111 +53,117 @@ fun FollowRepositoryCard(item: RepositoryFollow,cardAction: (Long) -> Job) { contentDescription = null, ) }, + isUndo = true, background = MaterialTheme.colorScheme.errorContainer ) - SwipeableActionsBox(endActions = listOf(deleteItem)) { - ElevatedCard( - modifier = Modifier.height(160.dp), + SwipeableActionsBox( + modifier = Modifier.padding(vertical = 2.5.dp), + swipeThreshold = 150.dp, + endActions = listOf(deleteItem) ) { - Row( + ElevatedCard( modifier = Modifier - .fillMaxWidth() - .wrapContentHeight() - .padding(horizontal = 5.dp, vertical = 5.dp) - .clickable { - }, - verticalAlignment = Alignment.CenterVertically + .height(160.dp) + .align(Alignment.CenterStart), ) { - AsyncImage( + Row( modifier = Modifier - .height(70.dp) - .width(70.dp) - .clip(CircleShape), - model = item.avatar, - contentScale = ContentScale.Fit, - contentDescription = "User Avatar" - ) - Column( - modifier = Modifier.padding(horizontal = 8.dp) + .fillMaxSize() + .padding(horizontal = 5.dp, vertical = 5.dp) + .clickable { + }, + verticalAlignment = Alignment.CenterVertically ) { - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.End + AsyncImage( + modifier = Modifier + .height(70.dp) + .width(70.dp) + .clip(CircleShape), + model = item.avatar, + contentScale = ContentScale.Fit, + contentDescription = "User Avatar" + ) + Column( + modifier = Modifier.padding(horizontal = 8.dp) ) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.End + ) { + Text( + text = item.stars.toString(), + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), + ) + Icon( + modifier = Modifier + .size(25.dp) + .padding(3.dp), + painter = painterResource(id = R.drawable.ic_star), + contentDescription = "Star Icon" + ) + Text( + text = item.forks.toString(), + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), + ) + Icon( + modifier = Modifier + .size(25.dp) + .padding(3.dp), + painter = painterResource(id = R.drawable.ic_git_icon), + contentDescription = "Git Icon" + ) + } Text( - text = item.stars.toString(), - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) - Icon( - modifier = Modifier - .size(25.dp) - .padding(3.dp), - painter = painterResource(id = R.drawable.ic_star), - contentDescription = "Star Icon" + text = item.name, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 20F, type = TextUnitType.Sp), ) Text( - text = item.forks.toString(), + text = "@${item.authorName}", + fontWeight = FontWeight.Bold, + maxLines = 1, + overflow = TextOverflow.Ellipsis, fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), ) - Icon( - modifier = Modifier - .size(25.dp) - .padding(3.dp), - painter = painterResource(id = R.drawable.ic_git_icon), - contentDescription = "Git Icon" + Spacer(modifier = Modifier.height(5.dp)) + Text( + text = item.description ?: "", + maxLines = 2, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 12F, type = TextUnitType.Sp), ) - } - Text( - text = item.name, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 20F, type = TextUnitType.Sp), - ) - Text( - text = "@${item.authorName}", - fontWeight = FontWeight.Bold, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) - Spacer(modifier = Modifier.height(5.dp)) - Text( - text = item.description ?: "", - maxLines = 2, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 12F, type = TextUnitType.Sp), - ) - Row( - modifier = Modifier - .fillMaxWidth() - .height(50.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { Row( - verticalAlignment = Alignment.CenterVertically + modifier = Modifier + .fillMaxWidth() + .height(50.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween ) { - Canvas( - modifier = Modifier - .height(10.dp) - .width(10.dp) + Row( + verticalAlignment = Alignment.CenterVertically ) { - drawCircle( - color = item.languageColor?.toColorInt()?.let { Color(it) } - ?: Color.Green, - radius = 20f + Canvas( + modifier = Modifier + .height(10.dp) + .width(10.dp) + ) { + drawCircle( + color = item.languageColor?.toColorInt()?.let { Color(it) } + ?: Color.Green, + radius = 20f + ) + } + Text( + modifier = Modifier.padding(horizontal = 5.dp), + text = item.language ?: "NA", + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), ) } - Text( - modifier = Modifier.padding(horizontal = 5.dp), - text = item.language ?: "NA", - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) } } } } - } } } diff --git a/app/src/main/java/com/debanshu777/compose_github/ui/feature_trending/components/DeveloperCard.kt b/app/src/main/java/com/debanshu777/compose_github/ui/feature_trending/components/DeveloperCard.kt index 11c33f8..c1f4473 100644 --- a/app/src/main/java/com/debanshu777/compose_github/ui/feature_trending/components/DeveloperCard.kt +++ b/app/src/main/java/com/debanshu777/compose_github/ui/feature_trending/components/DeveloperCard.kt @@ -1,31 +1,21 @@ package com.debanshu777.compose_github.ui.feature_trending.components import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Favorite -import androidx.compose.material.icons.filled.FavoriteBorder +import androidx.compose.material.icons.outlined.Favorite import androidx.compose.material3.ElevatedCard import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon -import androidx.compose.material3.IconToggleButton -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -43,6 +33,8 @@ import com.debanshu777.compose_github.network.dataSource.GitHubViewModel import com.debanshu777.compose_github.network.model.TrendingDeveloperItem import com.debanshu777.compose_github.ui.base.Screen import kotlinx.coroutines.Job +import me.saket.swipe.SwipeAction +import me.saket.swipe.SwipeableActionsBox import org.koin.androidx.compose.getViewModel @OptIn(ExperimentalUnitApi::class, ExperimentalMaterial3Api::class) @@ -53,100 +45,89 @@ fun DeveloperCard( action: (String) -> Job, viewModel: GitHubViewModel = getViewModel() ) { - ElevatedCard( - modifier = Modifier.height(160.dp), + val saveIcon = SwipeAction( + onSwipe = { + viewModel.insertDeveloper( + null, + item.username ?: "NA", + item.name ?: "NA", + item.avatar ?: "" + ) + }, + icon = { + Icon( + modifier = Modifier.padding(16.dp), + imageVector = Icons.Outlined.Favorite, + contentDescription = null, + ) + }, + isUndo = true, + background = Color(0xDC4CAF50) + ) + SwipeableActionsBox( + modifier = Modifier.padding(vertical = 2.5.dp), + swipeThreshold = 150.dp, + endActions = listOf(saveIcon) ) { - Row( + ElevatedCard( modifier = Modifier - .fillMaxWidth() - .wrapContentHeight() - .padding(horizontal = 5.dp) - .clickable { - item.username?.let { it1 -> action(it1) } - navController.navigate(Screen.ProfileScreen.route) - }, - verticalAlignment = Alignment.CenterVertically + .height(160.dp) + .align(Alignment.CenterStart), ) { - AsyncImage( - modifier = Modifier - .height(70.dp) - .width(70.dp) - .clip(CircleShape), - model = item.avatar, - contentScale = ContentScale.Fit, - contentDescription = "User Avatar" - ) - Column( - modifier = Modifier.padding(horizontal=8.dp) - ) { - Text( - text = item.name ?: "NA", - maxLines = 1, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 20F, type = TextUnitType.Sp), - ) - Text( - text = "@${item.username}", - maxLines = 1, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) - Spacer(modifier = Modifier.height(10.dp)) - Text( - text = "Popular Project", - fontWeight = FontWeight.Bold, - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) - Text( - text = item.repo?.name ?: "NA", - maxLines = 1, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) - Spacer(modifier = Modifier.height(3.dp)) - Text( - modifier = Modifier.width(250.dp), - text = item.repo?.description ?: "NA", - maxLines = 2, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 12F, type = TextUnitType.Sp), - ) - } Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.End + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 5.dp) + .clickable { + item.username?.let { it1 -> action(it1) } + navController.navigate(Screen.ProfileScreen.route) + }, + verticalAlignment = Alignment.CenterVertically ) { - Surface( - shape = CircleShape, + AsyncImage( modifier = Modifier - .padding(6.dp) - .size(32.dp), - color = Color(0x1A000000) + .height(70.dp) + .width(70.dp) + .clip(CircleShape), + model = item.avatar, + contentScale = ContentScale.Fit, + contentDescription = "User Avatar" + ) + Column( + modifier = Modifier.padding(horizontal = 8.dp) ) { - var isFavorite by remember { mutableStateOf(false) } - - IconToggleButton( - checked = isFavorite, - onCheckedChange = { - isFavorite = !isFavorite - viewModel.insertDeveloper( - null, - item.username ?: "NA", - item.name ?: "NA", - item.avatar ?: "" - ) - } - ) { - Icon( - tint = Color(0xffE91E63), - imageVector = if (isFavorite) { - Icons.Filled.Favorite - } else { - Icons.Default.FavoriteBorder - }, - contentDescription = null - ) - } + Text( + text = item.name ?: "NA", + maxLines = 1, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 20F, type = TextUnitType.Sp), + ) + Text( + text = "@${item.username}", + maxLines = 1, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), + ) + Spacer(modifier = Modifier.height(10.dp)) + Text( + text = "Popular Project", + fontWeight = FontWeight.Bold, + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), + ) + Text( + text = item.repo?.name ?: "NA", + maxLines = 1, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), + ) + Spacer(modifier = Modifier.height(3.dp)) + Text( + modifier = Modifier.width(250.dp), + text = item.repo?.description ?: "NA", + maxLines = 2, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 12F, type = TextUnitType.Sp), + ) } } } diff --git a/app/src/main/java/com/debanshu777/compose_github/ui/feature_trending/components/RepositoryCard.kt b/app/src/main/java/com/debanshu777/compose_github/ui/feature_trending/components/RepositoryCard.kt index f561461..d16c543 100644 --- a/app/src/main/java/com/debanshu777/compose_github/ui/feature_trending/components/RepositoryCard.kt +++ b/app/src/main/java/com/debanshu777/compose_github/ui/feature_trending/components/RepositoryCard.kt @@ -14,19 +14,12 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Favorite -import androidx.compose.material.icons.filled.FavoriteBorder +import androidx.compose.material.icons.outlined.Favorite import androidx.compose.material3.ElevatedCard import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon -import androidx.compose.material3.IconToggleButton -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -44,144 +37,141 @@ import coil.compose.AsyncImage import com.debanshu777.compose_github.R import com.debanshu777.compose_github.network.dataSource.GitHubViewModel import com.debanshu777.compose_github.network.model.TrendingRepositoryItem +import me.saket.swipe.SwipeAction +import me.saket.swipe.SwipeableActionsBox import org.koin.androidx.compose.getViewModel @OptIn(ExperimentalUnitApi::class, ExperimentalMaterial3Api::class) @Composable fun RepositoryCard(item: TrendingRepositoryItem, viewModel: GitHubViewModel = getViewModel()) { - ElevatedCard( - modifier = Modifier.height(165.dp), + val saveIcon = SwipeAction( + onSwipe = { + viewModel.insertRepository( + null, + item.author ?: "NA", + item.name ?: "NA", + item.avatar ?: "", + item.description ?: "NA", + item.language ?: "NA", + item.languageColor ?: "NA", + item.forks!!.toLong(), + item.stars!!.toLong() + ) + }, + icon = { + Icon( + modifier = Modifier.padding(16.dp), + imageVector = Icons.Outlined.Favorite, + contentDescription = null, + ) + }, + isUndo = true, + background = Color(0xDC4CAF50) + ) + SwipeableActionsBox( + modifier = Modifier.padding(vertical = 2.5.dp), + swipeThreshold = 150.dp, + endActions = listOf(saveIcon) ) { - Row( + ElevatedCard( modifier = Modifier - .fillMaxWidth() - .wrapContentHeight() - .padding(horizontal = 5.dp) - .clickable { - }, - verticalAlignment = Alignment.CenterVertically + .height(160.dp) + .align(Alignment.CenterStart), ) { - AsyncImage( + Row( modifier = Modifier - .height(70.dp) - .width(70.dp) - .clip(CircleShape), - model = item.avatar, - contentScale = ContentScale.Fit, - contentDescription = "User Avatar" - ) - Column( - modifier = Modifier.padding(horizontal = 8.dp) + .fillMaxWidth() + .wrapContentHeight() + .padding(horizontal = 5.dp) + .clickable { + }, + verticalAlignment = Alignment.CenterVertically ) { - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.End - ) { - Text( - text = item.stars.toString(), - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) - Icon( - modifier = Modifier - .size(25.dp) - .padding(3.dp), - painter = painterResource(id = R.drawable.ic_star), - contentDescription = "Star Icon" - ) - Text( - text = item.forks.toString(), - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) - Icon( - modifier = Modifier - .size(25.dp) - .padding(3.dp), - painter = painterResource(id = R.drawable.ic_git_icon), - contentDescription = "Git Icon" - ) - } - Text( - text = item.name ?: "NA", - maxLines = 1, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 20F, type = TextUnitType.Sp), - ) - Text( - text = "@${item.author}", - fontWeight = FontWeight.Bold, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), - ) - Spacer(modifier = Modifier.height(5.dp)) - Text( - text = item.description ?: "", - maxLines = 2, - overflow = TextOverflow.Ellipsis, - fontSize = TextUnit(value = 12F, type = TextUnitType.Sp), - ) - Row( + AsyncImage( modifier = Modifier - .fillMaxWidth() - .height(50.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween + .height(70.dp) + .width(70.dp) + .clip(CircleShape), + model = item.avatar, + contentScale = ContentScale.Fit, + contentDescription = "User Avatar" + ) + Column( + modifier = Modifier.padding(horizontal = 8.dp) ) { Row( - verticalAlignment = Alignment.CenterVertically + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.End ) { - Canvas( + Text( + text = item.stars.toString(), + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), + ) + Icon( modifier = Modifier - .height(10.dp) - .width(10.dp) - ) { - drawCircle( - color = item.languageColor?.toColorInt()?.let { Color(it) } - ?: Color.Green, - radius = 20f - ) - } + .size(25.dp) + .padding(3.dp), + painter = painterResource(id = R.drawable.ic_star), + contentDescription = "Star Icon" + ) Text( - modifier = Modifier.padding(horizontal = 5.dp), - text = item.language ?: "NA", + text = item.forks.toString(), fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), ) + Icon( + modifier = Modifier + .size(25.dp) + .padding(3.dp), + painter = painterResource(id = R.drawable.ic_git_icon), + contentDescription = "Git Icon" + ) } - Surface( - shape = CircleShape, + Text( + text = item.name ?: "NA", + maxLines = 1, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 20F, type = TextUnitType.Sp), + ) + Text( + text = "@${item.author}", + fontWeight = FontWeight.Bold, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), + ) + Spacer(modifier = Modifier.height(5.dp)) + Text( + text = item.description ?: "", + maxLines = 2, + overflow = TextOverflow.Ellipsis, + fontSize = TextUnit(value = 12F, type = TextUnitType.Sp), + ) + Row( modifier = Modifier - .padding(6.dp) - .size(32.dp), - color = Color(0x1A000000) + .fillMaxWidth() + .height(50.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween ) { - var isFavorite by remember { mutableStateOf(false) } - - IconToggleButton( - checked = isFavorite, - onCheckedChange = { - isFavorite = !isFavorite - viewModel.insertRepository( - null, - item.author ?: "NA", - item.name ?: "NA", - item.avatar ?: "", - item.description ?: "NA", - item.language ?: "NA", - item.languageColor ?: "NA", - item.forks!!.toLong(), - item.stars!!.toLong() + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Canvas( + modifier = Modifier + .height(10.dp) + .width(10.dp) + ) { + drawCircle( + color = item.languageColor?.toColorInt()?.let { Color(it) } + ?: Color.Green, + radius = 20f ) } - ) { - Icon( - tint = Color(0xffE91E63), - imageVector = if (isFavorite) { - Icons.Filled.Favorite - } else { - Icons.Default.FavoriteBorder - }, - contentDescription = null + Text( + modifier = Modifier.padding(horizontal = 5.dp), + text = item.language ?: "NA", + fontSize = TextUnit(value = 14F, type = TextUnitType.Sp), ) } }