fix(android): update HomeScreen + AppNavigation routing
This commit is contained in:
parent
4215563873
commit
afa64bfb36
|
|
@ -1,14 +1,9 @@
|
||||||
package app.closer.core.navigation
|
package app.closer.core.navigation
|
||||||
|
|
||||||
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
import androidx.compose.material.icons.automirrored.filled.Chat
|
|
||||||
import androidx.compose.material.icons.filled.Favorite
|
|
||||||
import androidx.compose.material.icons.filled.Home
|
|
||||||
import androidx.compose.material.icons.filled.PlayArrow
|
|
||||||
import androidx.compose.material.icons.filled.Settings
|
|
||||||
import androidx.compose.material.icons.filled.Star
|
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
|
|
@ -23,6 +18,7 @@ import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
|
import androidx.compose.ui.res.vectorResource
|
||||||
import androidx.navigation.NavType
|
import androidx.navigation.NavType
|
||||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
import androidx.navigation.compose.NavHost
|
import androidx.navigation.compose.NavHost
|
||||||
|
|
@ -33,6 +29,7 @@ import androidx.navigation.navArgument
|
||||||
import androidx.navigation.navDeepLink
|
import androidx.navigation.navDeepLink
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import app.closer.R
|
||||||
import app.closer.ui.auth.ForgotPasswordScreen
|
import app.closer.ui.auth.ForgotPasswordScreen
|
||||||
import app.closer.ui.answers.AnswerHistoryScreen
|
import app.closer.ui.answers.AnswerHistoryScreen
|
||||||
import app.closer.ui.answers.AnswerRevealScreen
|
import app.closer.ui.answers.AnswerRevealScreen
|
||||||
|
|
@ -599,15 +596,15 @@ fun AppNavigation(
|
||||||
private data class TopLevelRoute(
|
private data class TopLevelRoute(
|
||||||
val route: String,
|
val route: String,
|
||||||
val label: String,
|
val label: String,
|
||||||
val icon: ImageVector
|
@DrawableRes val iconRes: Int
|
||||||
)
|
)
|
||||||
|
|
||||||
private val topLevelRoutes = listOf(
|
private val topLevelRoutes = listOf(
|
||||||
TopLevelRoute(AppRoute.HOME, "Home", Icons.Filled.Home),
|
TopLevelRoute(AppRoute.HOME, "Home", R.drawable.glyph_home),
|
||||||
TopLevelRoute(AppRoute.DAILY_QUESTION, "Today", Icons.Filled.Favorite),
|
TopLevelRoute(AppRoute.DAILY_QUESTION, "Today", R.drawable.glyph_daily_card),
|
||||||
TopLevelRoute(AppRoute.PLAY, "Play", Icons.Filled.PlayArrow),
|
TopLevelRoute(AppRoute.PLAY, "Play", R.drawable.glyph_play),
|
||||||
TopLevelRoute(AppRoute.MESSAGES, "Messages", Icons.AutoMirrored.Filled.Chat),
|
TopLevelRoute(AppRoute.MESSAGES, "Messages", R.drawable.glyph_chat),
|
||||||
TopLevelRoute(AppRoute.SETTINGS, "Settings", Icons.Filled.Settings)
|
TopLevelRoute(AppRoute.SETTINGS, "Settings", R.drawable.glyph_settings)
|
||||||
)
|
)
|
||||||
|
|
||||||
private val shellBackRoutes = setOf(
|
private val shellBackRoutes = setOf(
|
||||||
|
|
@ -651,7 +648,7 @@ private fun AppBottomNavigation(
|
||||||
onClick = { onRouteSelected(item.route) },
|
onClick = { onRouteSelected(item.route) },
|
||||||
icon = {
|
icon = {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = item.icon,
|
imageVector = ImageVector.vectorResource(item.iconRes),
|
||||||
contentDescription = item.label
|
contentDescription = item.label
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package app.closer.ui.home
|
||||||
import app.closer.core.navigation.AppRoute
|
import app.closer.core.navigation.AppRoute
|
||||||
import app.closer.domain.model.Question
|
import app.closer.domain.model.Question
|
||||||
import app.closer.domain.model.QuestionCategory
|
import app.closer.domain.model.QuestionCategory
|
||||||
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
|
|
@ -43,13 +44,6 @@ import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.filled.TrendingUp
|
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowForward
|
|
||||||
import androidx.compose.material.icons.filled.Favorite
|
|
||||||
import androidx.compose.material.icons.filled.Lock
|
|
||||||
import androidx.compose.material.icons.filled.LocalFireDepartment
|
|
||||||
import androidx.compose.material.icons.filled.PlayArrow
|
|
||||||
import androidx.compose.material3.ButtonDefaults
|
import androidx.compose.material3.ButtonDefaults
|
||||||
import app.closer.domain.model.OutcomeDay
|
import app.closer.domain.model.OutcomeDay
|
||||||
import app.closer.ui.components.OutcomeCheckInDialog
|
import app.closer.ui.components.OutcomeCheckInDialog
|
||||||
|
|
@ -71,8 +65,10 @@ import androidx.compose.ui.graphics.Brush
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.res.vectorResource
|
||||||
import app.closer.ui.components.BrandIllustration
|
import app.closer.ui.components.BrandIllustration
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
|
|
@ -384,6 +380,35 @@ private fun HomeContent(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DrawableRes
|
||||||
|
private fun homeActionGlyph(target: HomeActionTarget): Int = when (target) {
|
||||||
|
HomeActionTarget.InvitePartner -> R.drawable.glyph_couple
|
||||||
|
HomeActionTarget.DailyQuestion -> R.drawable.glyph_daily_card
|
||||||
|
HomeActionTarget.AnswerHistory -> R.drawable.glyph_paired_cards
|
||||||
|
HomeActionTarget.QuestionPacks -> R.drawable.glyph_question_packs
|
||||||
|
HomeActionTarget.Settings -> R.drawable.glyph_settings
|
||||||
|
HomeActionTarget.AnswerReveal -> R.drawable.glyph_sealed_answer
|
||||||
|
HomeActionTarget.Game -> R.drawable.glyph_closer_heart_keyhole
|
||||||
|
HomeActionTarget.Challenge -> R.drawable.glyph_connection_challenge
|
||||||
|
HomeActionTarget.DatePlan -> R.drawable.glyph_date_card_heart
|
||||||
|
HomeActionTarget.MemoryCapsule -> R.drawable.glyph_memory_capsule
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun HomeGlyphIcon(
|
||||||
|
@DrawableRes resId: Int,
|
||||||
|
contentDescription: String?,
|
||||||
|
tint: Color,
|
||||||
|
modifier: Modifier = Modifier
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = ImageVector.vectorResource(resId),
|
||||||
|
contentDescription = contentDescription,
|
||||||
|
tint = tint,
|
||||||
|
modifier = modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun StreakCard(
|
private fun StreakCard(
|
||||||
streakCount: Int,
|
streakCount: Int,
|
||||||
|
|
@ -417,8 +442,8 @@ private fun StreakCard(
|
||||||
modifier = Modifier.size(52.dp)
|
modifier = Modifier.size(52.dp)
|
||||||
) {
|
) {
|
||||||
Box(contentAlignment = Alignment.Center) {
|
Box(contentAlignment = Alignment.Center) {
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
imageVector = Icons.Filled.LocalFireDepartment,
|
resId = R.drawable.glyph_streak,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = CloserPalette.PinkAccentDeep,
|
tint = CloserPalette.PinkAccentDeep,
|
||||||
modifier = Modifier.size(28.dp)
|
modifier = Modifier.size(28.dp)
|
||||||
|
|
@ -491,8 +516,8 @@ private fun HomeHeader(
|
||||||
.clickable(onClick = onTogether),
|
.clickable(onClick = onTogether),
|
||||||
contentAlignment = Alignment.Center
|
contentAlignment = Alignment.Center
|
||||||
) {
|
) {
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
Icons.Filled.Favorite,
|
resId = R.drawable.glyph_closer_heart_keyhole,
|
||||||
contentDescription = "Together activity",
|
contentDescription = "Together activity",
|
||||||
tint = CloserPalette.PurpleRich,
|
tint = CloserPalette.PurpleRich,
|
||||||
modifier = Modifier.size(20.dp)
|
modifier = Modifier.size(20.dp)
|
||||||
|
|
@ -576,8 +601,8 @@ private fun PartnerActivationCard(
|
||||||
horizontalArrangement = Arrangement.spacedBy(5.dp),
|
horizontalArrangement = Arrangement.spacedBy(5.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
imageVector = Icons.Filled.Lock,
|
resId = R.drawable.glyph_lock,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = inviteTone.deep,
|
tint = inviteTone.deep,
|
||||||
modifier = Modifier.size(14.dp)
|
modifier = Modifier.size(14.dp)
|
||||||
|
|
@ -838,8 +863,8 @@ private fun PrimaryHomeActionCard(
|
||||||
modifier = Modifier.size(52.dp)
|
modifier = Modifier.size(52.dp)
|
||||||
) {
|
) {
|
||||||
Box(contentAlignment = Alignment.Center) {
|
Box(contentAlignment = Alignment.Center) {
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
imageVector = Icons.Filled.Favorite,
|
resId = homeActionGlyph(action.target),
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = colors.deep,
|
tint = colors.deep,
|
||||||
modifier = Modifier.size(26.dp)
|
modifier = Modifier.size(26.dp)
|
||||||
|
|
@ -987,8 +1012,8 @@ private fun SecondaryHomeActionCard(
|
||||||
.background(colors.soft, RoundedCornerShape(CloserRadii.Button)),
|
.background(colors.soft, RoundedCornerShape(CloserRadii.Button)),
|
||||||
contentAlignment = Alignment.Center
|
contentAlignment = Alignment.Center
|
||||||
) {
|
) {
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
imageVector = Icons.Filled.Favorite,
|
resId = homeActionGlyph(action.target),
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = colors.deep,
|
tint = colors.deep,
|
||||||
modifier = Modifier.size(20.dp)
|
modifier = Modifier.size(20.dp)
|
||||||
|
|
@ -1025,8 +1050,8 @@ private fun SecondaryHomeActionCard(
|
||||||
shape = RoundedCornerShape(CloserRadii.Button),
|
shape = RoundedCornerShape(CloserRadii.Button),
|
||||||
color = colors.soft
|
color = colors.soft
|
||||||
) {
|
) {
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
imageVector = Icons.AutoMirrored.Filled.ArrowForward,
|
resId = R.drawable.glyph_forward,
|
||||||
contentDescription = action.cta,
|
contentDescription = action.cta,
|
||||||
tint = colors.deep,
|
tint = colors.deep,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
|
@ -1319,8 +1344,8 @@ private fun GameWaitingHeroCard(
|
||||||
.border(1.5.dp, Color.White.copy(alpha = 0.5f), CircleShape),
|
.border(1.5.dp, Color.White.copy(alpha = 0.5f), CircleShape),
|
||||||
contentAlignment = Alignment.Center
|
contentAlignment = Alignment.Center
|
||||||
) {
|
) {
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
imageVector = Icons.Filled.PlayArrow,
|
resId = R.drawable.glyph_play,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = Color.White,
|
tint = Color.White,
|
||||||
modifier = Modifier.size(24.dp)
|
modifier = Modifier.size(24.dp)
|
||||||
|
|
@ -1349,7 +1374,7 @@ private fun GameWaitingHeroCard(
|
||||||
shape = RoundedCornerShape(CloserRadii.Button)
|
shape = RoundedCornerShape(CloserRadii.Button)
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.PlayArrow,
|
imageVector = ImageVector.vectorResource(R.drawable.glyph_play),
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
modifier = Modifier.size(20.dp)
|
modifier = Modifier.size(20.dp)
|
||||||
)
|
)
|
||||||
|
|
@ -1389,8 +1414,8 @@ private fun PendingActionCardView(
|
||||||
.background(colors.soft, RoundedCornerShape(CloserRadii.Button)),
|
.background(colors.soft, RoundedCornerShape(CloserRadii.Button)),
|
||||||
contentAlignment = Alignment.Center
|
contentAlignment = Alignment.Center
|
||||||
) {
|
) {
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
imageVector = Icons.Filled.Favorite,
|
resId = homeActionGlyph(card.target),
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = colors.deep,
|
tint = colors.deep,
|
||||||
modifier = Modifier.size(20.dp)
|
modifier = Modifier.size(20.dp)
|
||||||
|
|
@ -1417,8 +1442,8 @@ private fun PendingActionCardView(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Icon(
|
HomeGlyphIcon(
|
||||||
imageVector = Icons.AutoMirrored.Filled.ArrowForward,
|
resId = R.drawable.glyph_forward,
|
||||||
contentDescription = "Open",
|
contentDescription = "Open",
|
||||||
tint = colors.deep,
|
tint = colors.deep,
|
||||||
modifier = Modifier.size(20.dp)
|
modifier = Modifier.size(20.dp)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue