From 851bbebd43236861b2ed2897f51a770595207add Mon Sep 17 00:00:00 2001 From: Infi Date: Mon, 19 Dec 2022 16:19:19 +0100 Subject: [PATCH] feat: LinkOnHome component --- app/src/main/java/chat/revolt/MainActivity.kt | 22 +++++---- .../components/generic/CollapsibleCard.kt | 4 +- .../components/screens/home/LinkOnHome.kt | 48 +++++++++++++++++++ .../chat/revolt/screens/chat/HomeScreen.kt | 28 ++++++----- 4 files changed, 79 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/chat/revolt/components/screens/home/LinkOnHome.kt diff --git a/app/src/main/java/chat/revolt/MainActivity.kt b/app/src/main/java/chat/revolt/MainActivity.kt index 994337a8..086bc509 100644 --- a/app/src/main/java/chat/revolt/MainActivity.kt +++ b/app/src/main/java/chat/revolt/MainActivity.kt @@ -4,11 +4,14 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.animation.* +import androidx.compose.animation.core.EaseInOutExpo +import androidx.compose.animation.core.FiniteAnimationSpec import androidx.compose.animation.core.tween import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.IntOffset import chat.revolt.screens.about.AboutScreen import chat.revolt.screens.about.AttributionScreen import chat.revolt.screens.about.PlaceholderScreen @@ -39,6 +42,9 @@ class MainActivity : ComponentActivity() { } } +val RevoltTweenInt: FiniteAnimationSpec = tween(400, easing = EaseInOutExpo) +val RevoltTweenFloat: FiniteAnimationSpec = tween(400, easing = EaseInOutExpo) + @OptIn(ExperimentalAnimationApi::class) @Composable fun AppEntrypoint() { @@ -50,26 +56,26 @@ fun AppEntrypoint() { enterTransition = { slideIntoContainer( AnimatedContentScope.SlideDirection.Left, - animationSpec = tween(400) - ) + fadeIn(animationSpec = tween(400)) + animationSpec = RevoltTweenInt + ) + fadeIn(animationSpec = RevoltTweenFloat) }, exitTransition = { slideOutOfContainer( AnimatedContentScope.SlideDirection.Left, - animationSpec = tween(400) - ) + fadeOut(animationSpec = tween(400)) + animationSpec = RevoltTweenInt + ) + fadeOut(animationSpec = RevoltTweenFloat) }, popEnterTransition = { slideIntoContainer( AnimatedContentScope.SlideDirection.Right, - animationSpec = tween(400) - ) + fadeIn(animationSpec = tween(400)) + animationSpec = RevoltTweenInt + ) + fadeIn(animationSpec = RevoltTweenFloat) }, popExitTransition = { slideOutOfContainer( AnimatedContentScope.SlideDirection.Right, - animationSpec = tween(400) - ) + fadeOut(animationSpec = tween(400)) + animationSpec = RevoltTweenInt + ) + fadeOut(animationSpec = RevoltTweenFloat) } ) { composable("login/greeting") { GreeterScreen(navController) } diff --git a/app/src/main/java/chat/revolt/components/generic/CollapsibleCard.kt b/app/src/main/java/chat/revolt/components/generic/CollapsibleCard.kt index 41aa1afc..380c82ae 100644 --- a/app/src/main/java/chat/revolt/components/generic/CollapsibleCard.kt +++ b/app/src/main/java/chat/revolt/components/generic/CollapsibleCard.kt @@ -22,9 +22,9 @@ fun CollapsibleCard( Card( modifier = modifier.padding(10.dp), - shape = MaterialTheme.shapes.small + shape = MaterialTheme.shapes.large ) { - Column() { + Column { Row( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/chat/revolt/components/screens/home/LinkOnHome.kt b/app/src/main/java/chat/revolt/components/screens/home/LinkOnHome.kt new file mode 100644 index 00000000..83fecefe --- /dev/null +++ b/app/src/main/java/chat/revolt/components/screens/home/LinkOnHome.kt @@ -0,0 +1,48 @@ +package chat.revolt.components.screens.home + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.* +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.text.font.FontWeight +import androidx.compose.ui.unit.dp + +@Composable +fun LinkOnHome( + heading: String, + icon: ImageVector, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + ElevatedButton( + onClick = onClick, + modifier = modifier + .padding(10.dp) + .fillMaxWidth() + .clickable { onClick() }, + ) { + Row( + modifier = Modifier + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + imageVector = icon, + contentDescription = null, + modifier = Modifier.padding(10.dp) + ) + Text( + text = heading, + style = MaterialTheme.typography.titleMedium.copy( + fontWeight = FontWeight.Bold + ), + modifier = Modifier.padding(5.dp) + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/chat/revolt/screens/chat/HomeScreen.kt b/app/src/main/java/chat/revolt/screens/chat/HomeScreen.kt index 5ff9fac7..84861a96 100644 --- a/app/src/main/java/chat/revolt/screens/chat/HomeScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/HomeScreen.kt @@ -2,6 +2,8 @@ package chat.revolt.screens.chat import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Send import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -22,9 +24,9 @@ import androidx.lifecycle.viewModelScope import androidx.navigation.NavController import chat.revolt.api.REVOLT_FILES import chat.revolt.api.RevoltAPI -import chat.revolt.components.generic.CollapsibleCard import chat.revolt.components.generic.FormTextField import chat.revolt.components.generic.RemoteImage +import chat.revolt.components.screens.home.LinkOnHome import chat.revolt.persistence.KVStorage import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch @@ -101,17 +103,18 @@ fun HomeScreen(navController: NavController, viewModel: HomeScreenViewModel = hi } } - CollapsibleCard(title = "Send a message") { - Column() { - FormTextField( - value = viewModel.messageContent, - label = "Content", - onChange = viewModel::setMessageContent - ) - Button(onClick = { viewModel.sendMessage() }) { - Text(text = "Send") - } - } + Column() { + FormTextField( + value = viewModel.messageContent, + label = "Content", + modifier = Modifier.fillMaxWidth(), + onChange = viewModel::setMessageContent + ) + LinkOnHome( + heading = "Send", + icon = Icons.Filled.Send, + onClick = viewModel::sendMessage + ) } } Button( @@ -130,5 +133,4 @@ fun HomeScreen(navController: NavController, viewModel: HomeScreenViewModel = hi Text("Logout") } } - } \ No newline at end of file