feat(android): migrate all UI surfaces from Material icons to brand glyphs (CloserGlyphs catalog)

This commit is contained in:
null 2026-06-28 17:46:11 -05:00
parent c31ae4b1f7
commit 6cc78209af
49 changed files with 158 additions and 214 deletions

View File

@ -2,8 +2,6 @@ package app.closer.core.navigation
import androidx.annotation.DrawableRes 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.automirrored.filled.ArrowBack
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
@ -83,6 +81,7 @@ import app.closer.ui.wheel.WheelCompleteScreen
import app.closer.ui.wheel.GameHistoryScreen import app.closer.ui.wheel.GameHistoryScreen
import app.closer.ui.wheel.WheelSessionScreen import app.closer.ui.wheel.WheelSessionScreen
import app.closer.ui.games.WaitingForPartnerScreen import app.closer.ui.games.WaitingForPartnerScreen
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -190,7 +189,7 @@ fun AppNavigation(
navigationIcon = { navigationIcon = {
IconButton(onClick = navigateBackOrHome) { IconButton(onClick = navigateBackOrHome) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = CloserGlyphs.Back,
contentDescription = "Back" contentDescription = "Back"
) )
} }

View File

@ -25,7 +25,6 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
@ -59,6 +58,7 @@ import app.closer.ui.components.CategoryGlyph
import app.closer.ui.components.EmptyState import app.closer.ui.components.EmptyState
import app.closer.ui.theme.CloserPalette import app.closer.ui.theme.CloserPalette
import app.closer.ui.questions.displayCategoryName import app.closer.ui.questions.displayCategoryName
import app.closer.ui.components.CloserGlyphs
private enum class AnswerHistoryFilter { private enum class AnswerHistoryFilter {
ALL, PRIVATE, REVEALED ALL, PRIVATE, REVEALED
@ -383,7 +383,7 @@ private fun HistoryStateBadge(isRevealed: Boolean) {
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = if (isRevealed) Icons.Filled.Visibility else Icons.Filled.Lock, imageVector = if (isRevealed) Icons.Filled.Visibility else CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
tint = tint, tint = tint,
modifier = Modifier.size(14.dp) modifier = Modifier.size(14.dp)

View File

@ -15,9 +15,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Check
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import app.closer.ui.components.BrandMessageRotator import app.closer.ui.components.BrandMessageRotator
@ -50,6 +47,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.core.navigation.AppRoute import app.closer.core.navigation.AppRoute
import app.closer.ui.components.StatusGlyph import app.closer.ui.components.StatusGlyph
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -75,7 +73,7 @@ fun ForgotPasswordScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate(AppRoute.LOGIN) }) { IconButton(onClick = { onNavigate(AppRoute.LOGIN) }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = AuthInk tint = AuthInk
) )
@ -101,7 +99,7 @@ fun ForgotPasswordScreen(
if (state.sent) { if (state.sent) {
Spacer(Modifier.height(48.dp)) Spacer(Modifier.height(48.dp))
StatusGlyph( StatusGlyph(
icon = Icons.Filled.Check, icon = CloserGlyphs.Check,
tint = AuthPrimaryDeep, tint = AuthPrimaryDeep,
container = AuthPrimary.copy(alpha = 0.16f) container = AuthPrimary.copy(alpha = 0.16f)
) )

View File

@ -24,7 +24,6 @@ import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
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.filled.Visibility import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material3.Button import androidx.compose.material3.Button
@ -64,6 +63,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.core.navigation.AppRoute import app.closer.core.navigation.AppRoute
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -97,7 +97,7 @@ fun SignUpScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate(AppRoute.LOGIN) }) { IconButton(onClick = { onNavigate(AppRoute.LOGIN) }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = AuthInk tint = AuthInk
) )

View File

@ -21,10 +21,6 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -84,6 +80,7 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import app.closer.ui.components.CloserGlyphs
// ── ViewModel ───────────────────────────────────────────────────────────────── // ── ViewModel ─────────────────────────────────────────────────────────────────
@ -359,7 +356,7 @@ private fun ChallengesPickScreen(
) { ) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = MaterialTheme.colorScheme.onBackground tint = MaterialTheme.colorScheme.onBackground
) )
@ -458,7 +455,7 @@ private fun ChallengePickCard(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(3.dp) horizontalArrangement = Arrangement.spacedBy(3.dp)
) { ) {
Icon(Icons.Filled.Lock, contentDescription = null, tint = CloserPalette.Gold, modifier = Modifier.size(10.dp)) Icon(CloserGlyphs.Lock, contentDescription = null, tint = CloserPalette.Gold, modifier = Modifier.size(10.dp))
Text("Premium", style = MaterialTheme.typography.labelSmall, color = CloserPalette.Gold, fontWeight = FontWeight.SemiBold) Text("Premium", style = MaterialTheme.typography.labelSmall, color = CloserPalette.Gold, fontWeight = FontWeight.SemiBold)
} }
} }
@ -558,7 +555,7 @@ private fun ChallengesActiveScreen(
) { ) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = MaterialTheme.colorScheme.onBackground tint = MaterialTheme.colorScheme.onBackground
) )
@ -694,7 +691,7 @@ private fun ChallengesActiveScreen(
horizontalArrangement = Arrangement.spacedBy(10.dp) horizontalArrangement = Arrangement.spacedBy(10.dp)
) { ) {
val icon = when { val icon = when {
isBothDone -> Icons.Filled.Check isBothDone -> CloserGlyphs.Check
else -> null else -> null
} }
if (icon != null) { if (icon != null) {
@ -839,7 +836,7 @@ private fun DayTrackerStrip(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
if (jointDone) { if (jointDone) {
Icon(Icons.Filled.Check, contentDescription = null, tint = Color.White, modifier = Modifier.size(14.dp)) Icon(CloserGlyphs.Check, contentDescription = null, tint = Color.White, modifier = Modifier.size(14.dp))
} else { } else {
Text( Text(
text = "$day", text = "$day",

View File

@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -192,7 +191,7 @@ private fun GamePromptCard(
IconButton(onClick = onDismiss) { IconButton(onClick = onDismiss) {
Icon( Icon(
imageVector = Icons.Filled.Close, imageVector = CloserGlyphs.Close,
contentDescription = "Dismiss", contentDescription = "Dismiss",
tint = Color.White.copy(alpha = 0.8f), tint = Color.White.copy(alpha = 0.8f),
modifier = Modifier.size(20.dp) modifier = Modifier.size(20.dp)

View File

@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Chat import androidx.compose.material.icons.automirrored.filled.Chat
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@ -101,7 +100,7 @@ fun MessageBubbleOverlay(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Close, imageVector = CloserGlyphs.Close,
contentDescription = "Dismiss", contentDescription = "Dismiss",
tint = Color.White, tint = Color.White,
modifier = Modifier.size(28.dp) modifier = Modifier.size(28.dp)

View File

@ -22,9 +22,6 @@ import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Info
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -56,6 +53,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.domain.model.BucketListCategory import app.closer.domain.model.BucketListCategory
import app.closer.domain.model.BucketListItem import app.closer.domain.model.BucketListItem
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun BucketListScreen( fun BucketListScreen(
@ -175,7 +173,7 @@ private fun Header(
modifier = Modifier.padding(top = 4.dp) modifier = Modifier.padding(top = 4.dp)
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = MaterialTheme.colorScheme.onSurface tint = MaterialTheme.colorScheme.onSurface
) )

View File

@ -22,8 +22,6 @@ import androidx.compose.foundation.layout.width
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.automirrored.filled.ArrowBack
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePicker
@ -60,6 +58,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun DateBuilderScreen( fun DateBuilderScreen(
@ -165,7 +164,7 @@ private fun Header(
modifier = Modifier.padding(top = 4.dp) modifier = Modifier.padding(top = 4.dp)
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = MaterialTheme.colorScheme.onSurface tint = MaterialTheme.colorScheme.onSurface
) )

View File

@ -27,10 +27,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
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.Close
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.Star
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -70,6 +66,7 @@ import app.closer.ui.components.EmptyState
import app.closer.ui.components.ErrorState import app.closer.ui.components.ErrorState
import app.closer.ui.components.LoadingState import app.closer.ui.components.LoadingState
import kotlin.math.roundToInt import kotlin.math.roundToInt
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun DateMatchScreen( fun DateMatchScreen(
@ -243,7 +240,7 @@ private fun DateMatchHeader(
) { ) {
Box(modifier = Modifier.padding(8.dp)) { Box(modifier = Modifier.padding(8.dp)) {
Icon( Icon(
imageVector = Icons.Filled.Favorite, imageVector = CloserGlyphs.Heart,
contentDescription = "View matches", contentDescription = "View matches",
tint = MaterialTheme.colorScheme.onPrimaryContainer tint = MaterialTheme.colorScheme.onPrimaryContainer
) )
@ -405,7 +402,7 @@ private fun PremiumBadge() {
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Star, imageVector = CloserGlyphs.Star,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(14.dp), modifier = Modifier.size(14.dp),
tint = MaterialTheme.colorScheme.onSecondaryContainer tint = MaterialTheme.colorScheme.onSecondaryContainer
@ -467,14 +464,14 @@ private fun ActionButtons(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
CircularActionButton( CircularActionButton(
icon = Icons.Filled.Close, icon = CloserGlyphs.Close,
contentDescription = "Skip", contentDescription = "Skip",
color = MaterialTheme.colorScheme.errorContainer, color = MaterialTheme.colorScheme.errorContainer,
iconColor = Color(0xFF8D2D35), iconColor = Color(0xFF8D2D35),
onClick = onSkip onClick = onSkip
) )
CircularActionButton( CircularActionButton(
icon = Icons.Filled.Star, icon = CloserGlyphs.Star,
contentDescription = "Maybe", contentDescription = "Maybe",
color = MaterialTheme.colorScheme.tertiaryContainer.copy(alpha = 0.74f), color = MaterialTheme.colorScheme.tertiaryContainer.copy(alpha = 0.74f),
iconColor = Color(0xFF6B5D00), iconColor = Color(0xFF6B5D00),
@ -482,7 +479,7 @@ private fun ActionButtons(
size = 72.dp size = 72.dp
) )
CircularActionButton( CircularActionButton(
icon = Icons.Filled.Favorite, icon = CloserGlyphs.Heart,
contentDescription = "Love", contentDescription = "Love",
color = closerSoftPinkColor(), color = closerSoftPinkColor(),
iconColor = Color(0xFF9B1B5A), iconColor = Color(0xFF9B1B5A),

View File

@ -22,9 +22,6 @@ import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.Star
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -51,6 +48,7 @@ import app.closer.domain.model.SwipeAction
import app.closer.ui.components.EmptyState import app.closer.ui.components.EmptyState
import app.closer.ui.components.ErrorState import app.closer.ui.components.ErrorState
import app.closer.ui.components.LoadingState import app.closer.ui.components.LoadingState
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun DateMatchesScreen( fun DateMatchesScreen(
@ -145,7 +143,7 @@ private fun DateMatchesContent(
SectionHeader( SectionHeader(
title = "Mutual love", title = "Mutual love",
count = state.mutualMatches.size, count = state.mutualMatches.size,
icon = Icons.Filled.Favorite, icon = CloserGlyphs.Heart,
iconColor = Color(0xFF9B1B5A), iconColor = Color(0xFF9B1B5A),
modifier = Modifier.padding(top = 8.dp) modifier = Modifier.padding(top = 8.dp)
) )
@ -160,7 +158,7 @@ private fun DateMatchesContent(
SectionHeader( SectionHeader(
title = "Maybe together", title = "Maybe together",
count = state.maybeMatches.size, count = state.maybeMatches.size,
icon = Icons.Filled.Star, icon = CloserGlyphs.Star,
iconColor = Color(0xFF6B5D00), iconColor = Color(0xFF6B5D00),
modifier = Modifier.padding(top = 8.dp) modifier = Modifier.padding(top = 8.dp)
) )
@ -236,7 +234,7 @@ private fun MatchCard(match: DateMatch) {
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Favorite, imageVector = CloserGlyphs.Heart,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(14.dp), modifier = Modifier.size(14.dp),
tint = Color(0xFF9B1B5A) tint = Color(0xFF9B1B5A)
@ -268,7 +266,7 @@ private fun SuggestionCard(suggestion: DateMatchSuggestion) {
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Star, imageVector = CloserGlyphs.Star,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(14.dp), modifier = Modifier.size(14.dp),
tint = Color(0xFF6B5D00) tint = Color(0xFF6B5D00)

View File

@ -83,6 +83,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import app.closer.ui.components.CloserGlyphs
// ── Domain ──────────────────────────────────────────────────────────────────── // ── Domain ────────────────────────────────────────────────────────────────────
@ -599,7 +600,7 @@ private fun DSWaitingScreen(partnerName: String, onBack: () -> Unit, onAbandon:
) { ) {
Spacer(Modifier.weight(1f)) Spacer(Modifier.weight(1f))
StatusGlyph( StatusGlyph(
icon = Icons.Filled.Favorite, icon = CloserGlyphs.Heart,
tint = CloserPalette.Romantic, tint = CloserPalette.Romantic,
container = CloserPalette.Romantic.copy(alpha = 0.12f) container = CloserPalette.Romantic.copy(alpha = 0.12f)
) )
@ -785,7 +786,7 @@ private fun DSRevealScreen(
verticalArrangement = Arrangement.spacedBy(10.dp) verticalArrangement = Arrangement.spacedBy(10.dp)
) { ) {
StatusGlyph( StatusGlyph(
icon = if (matches.isEmpty()) Icons.Filled.FavoriteBorder else Icons.Filled.Favorite, icon = if (matches.isEmpty()) Icons.Filled.FavoriteBorder else CloserGlyphs.Heart,
tint = CloserPalette.Romantic, tint = CloserPalette.Romantic,
container = CloserPalette.Romantic.copy(alpha = 0.12f), container = CloserPalette.Romantic.copy(alpha = 0.12f),
size = 82.dp, size = 82.dp,
@ -994,7 +995,7 @@ private fun DesireMatchCard(match: DesireMatch) {
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
StatusGlyph( StatusGlyph(
icon = Icons.Filled.Favorite, icon = CloserGlyphs.Heart,
tint = CloserPalette.Romantic, tint = CloserPalette.Romantic,
container = CloserPalette.Romantic.copy(alpha = 0.12f), container = CloserPalette.Romantic.copy(alpha = 0.12f),
size = 34.dp, size = 34.dp,

View File

@ -19,8 +19,6 @@ import androidx.compose.foundation.shape.CircleShape
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.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.HourglassEmpty import androidx.compose.material.icons.filled.HourglassEmpty
import androidx.compose.material.icons.filled.LocalFireDepartment import androidx.compose.material.icons.filled.LocalFireDepartment
import androidx.compose.material.icons.filled.NotificationsNone import androidx.compose.material.icons.filled.NotificationsNone
@ -75,6 +73,7 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.tasks.await import kotlinx.coroutines.tasks.await
import app.closer.ui.components.CloserGlyphs
data class PartnerHomeUiState( data class PartnerHomeUiState(
val isLoading: Boolean = true, val isLoading: Boolean = true,
@ -237,7 +236,7 @@ fun PartnerHomeScreen(
}, },
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") Icon(CloserGlyphs.Back, contentDescription = "Back")
} }
}, },
colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent) colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent)
@ -423,7 +422,7 @@ private fun PartnerActivityCard(
) { ) {
Box(contentAlignment = Alignment.Center) { Box(contentAlignment = Alignment.Center) {
Icon( Icon(
imageVector = if (hasAnsweredToday) Icons.Filled.Check else Icons.Filled.HourglassEmpty, imageVector = if (hasAnsweredToday) CloserGlyphs.Check else Icons.Filled.HourglassEmpty,
contentDescription = null, contentDescription = null,
tint = if (hasAnsweredToday) CloserPalette.PurpleDeep else MaterialTheme.colorScheme.onSurfaceVariant, tint = if (hasAnsweredToday) CloserPalette.PurpleDeep else MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(20.dp) modifier = Modifier.size(20.dp)

View File

@ -26,10 +26,8 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.Psychology import androidx.compose.material.icons.filled.Psychology
import androidx.compose.material.icons.filled.Sync import androidx.compose.material.icons.filled.Sync
import androidx.compose.material.icons.filled.Timeline
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -91,6 +89,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import app.closer.ui.components.CloserGlyphs
// ── Domain ──────────────────────────────────────────────────────────────────── // ── Domain ────────────────────────────────────────────────────────────────────
@ -610,7 +609,7 @@ private fun PlayerIntroScreen(
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
StatusGlyph( StatusGlyph(
icon = if (amSubject) Icons.Filled.Person else Icons.Filled.Psychology, icon = if (amSubject) CloserGlyphs.Person else Icons.Filled.Psychology,
tint = CloserPalette.PurpleDeep, tint = CloserPalette.PurpleDeep,
container = CloserPalette.PurpleMist container = CloserPalette.PurpleMist
) )

View File

@ -25,7 +25,6 @@ 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.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.Edit
@ -91,6 +90,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import app.closer.ui.components.CloserGlyphs
// ── Unlock presets ───────────────────────────────────────────────────────────── // ── Unlock presets ─────────────────────────────────────────────────────────────
@ -462,7 +462,7 @@ private fun MemoryLaneLockedScreen(onBack: () -> Unit, onUnlock: () -> Unit) {
) { ) {
Surface(shape = RoundedCornerShape(50.dp), color = CloserPalette.Romantic.copy(alpha = 0.12f)) { Surface(shape = RoundedCornerShape(50.dp), color = CloserPalette.Romantic.copy(alpha = 0.12f)) {
Icon( Icon(
Icons.Filled.Lock, CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
modifier = Modifier.padding(20.dp).size(32.dp), modifier = Modifier.padding(20.dp).size(32.dp),
tint = CloserPalette.Romantic tint = CloserPalette.Romantic
@ -527,7 +527,7 @@ private fun CapsuleListScreen(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back", tint = MaterialTheme.colorScheme.onBackground) Icon(CloserGlyphs.Back, contentDescription = "Back", tint = MaterialTheme.colorScheme.onBackground)
} }
Spacer(Modifier.width(4.dp)) Spacer(Modifier.width(4.dp))
Column(modifier = Modifier.weight(1f)) { Column(modifier = Modifier.weight(1f)) {
@ -605,7 +605,7 @@ private fun CapsuleCard(capsule: TimeCapsule, onClick: () -> Unit) {
) { ) {
Box(contentAlignment = Alignment.Center) { Box(contentAlignment = Alignment.Center) {
Icon( Icon(
imageVector = if (unlocked) Icons.Filled.LockOpen else Icons.Filled.Lock, imageVector = if (unlocked) Icons.Filled.LockOpen else CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
tint = if (unlocked) CloserPalette.Evergreen else CloserPalette.PurpleDeep, tint = if (unlocked) CloserPalette.Evergreen else CloserPalette.PurpleDeep,
modifier = Modifier.size(22.dp) modifier = Modifier.size(22.dp)
@ -671,7 +671,7 @@ private fun CapsuleCreateScreen(
// Header // Header
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back", tint = MaterialTheme.colorScheme.onBackground) Icon(CloserGlyphs.Back, contentDescription = "Back", tint = MaterialTheme.colorScheme.onBackground)
} }
Spacer(Modifier.width(4.dp)) Spacer(Modifier.width(4.dp))
Text(if (isEditing) "Edit Capsule" else "New Capsule", style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), color = MaterialTheme.colorScheme.onBackground) Text(if (isEditing) "Edit Capsule" else "New Capsule", style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), color = MaterialTheme.colorScheme.onBackground)
@ -830,7 +830,7 @@ private fun CapsuleDetailScreen(
item { item {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back", tint = MaterialTheme.colorScheme.onBackground) Icon(CloserGlyphs.Back, contentDescription = "Back", tint = MaterialTheme.colorScheme.onBackground)
} }
Spacer(Modifier.width(4.dp)) Spacer(Modifier.width(4.dp))
Column(modifier = Modifier.weight(1f)) { Column(modifier = Modifier.weight(1f)) {
@ -899,7 +899,7 @@ private fun CapsuleDetailScreen(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(12.dp) verticalArrangement = Arrangement.spacedBy(12.dp)
) { ) {
Icon(Icons.Filled.Lock, contentDescription = null, tint = CloserPalette.PurpleDeep.copy(alpha = 0.5f), modifier = Modifier.size(40.dp)) Icon(CloserGlyphs.Lock, contentDescription = null, tint = CloserPalette.PurpleDeep.copy(alpha = 0.5f), modifier = Modifier.size(40.dp))
Text("Still sealed", style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center) Text("Still sealed", style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center)
Text( Text(
text = "Opens ${countdown(capsule.unlockAt)}${formatDate(capsule.unlockAt)}", text = "Opens ${countdown(capsule.unlockAt)}${formatDate(capsule.unlockAt)}",

View File

@ -17,9 +17,6 @@ import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
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.filled.Close
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.Refresh import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@ -57,6 +54,7 @@ import app.closer.ui.messages.components.ChatMessageRow
import app.closer.ui.messages.components.isSameChatDay import app.closer.ui.messages.components.isSameChatDay
import app.closer.ui.theme.closerBackgroundBrush import app.closer.ui.theme.closerBackgroundBrush
import coil.compose.AsyncImage import coil.compose.AsyncImage
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -119,7 +117,7 @@ fun ConversationScreen(
}, },
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") Icon(CloserGlyphs.Back, contentDescription = "Back")
} }
}, },
colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent) colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent)
@ -224,7 +222,7 @@ private fun PendingMediaChip(
Icon(Icons.Filled.Refresh, contentDescription = "Retry", tint = MaterialTheme.colorScheme.primary) Icon(Icons.Filled.Refresh, contentDescription = "Retry", tint = MaterialTheme.colorScheme.primary)
} }
IconButton(onClick = onDismiss, modifier = Modifier.size(48.dp)) { IconButton(onClick = onDismiss, modifier = Modifier.size(48.dp)) {
Icon(Icons.Filled.Close, contentDescription = "Dismiss", tint = MaterialTheme.colorScheme.onSurfaceVariant) Icon(CloserGlyphs.Close, contentDescription = "Dismiss", tint = MaterialTheme.colorScheme.onSurfaceVariant)
} }
} else { } else {
CircularProgressIndicator( CircularProgressIndicator(
@ -254,7 +252,7 @@ private fun ConversationAvatar(url: String?) {
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Filled.Person, imageVector = CloserGlyphs.Person,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(size).clip(CircleShape) modifier = Modifier.size(size).clip(CircleShape)

View File

@ -14,8 +14,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Person
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@ -37,6 +35,7 @@ import app.closer.ui.components.EmptyState
import app.closer.ui.theme.CloserPalette import app.closer.ui.theme.CloserPalette
import coil.compose.AsyncImage import coil.compose.AsyncImage
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun MessagesInboxScreen( fun MessagesInboxScreen(
@ -132,7 +131,7 @@ private fun ConversationRow(
modifier = Modifier.size(52.dp).clip(CircleShape).background(MaterialTheme.colorScheme.surfaceVariant), modifier = Modifier.size(52.dp).clip(CircleShape).background(MaterialTheme.colorScheme.surfaceVariant),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Icon(Icons.Filled.Person, contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant) Icon(CloserGlyphs.Person, contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant)
} }
} }

View File

@ -31,14 +31,11 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Send import androidx.compose.material.icons.automirrored.filled.Send
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.ContentCopy import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.Image import androidx.compose.material.icons.filled.Image
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.Mic import androidx.compose.material.icons.filled.Mic
import androidx.compose.material.icons.filled.Pause import androidx.compose.material.icons.filled.Pause
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.PhotoCamera import androidx.compose.material.icons.filled.PhotoCamera
import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
@ -87,6 +84,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
import java.nio.ByteBuffer import java.nio.ByteBuffer
import app.closer.ui.components.CloserGlyphs
/** /**
* One chat row Messenger style: only the partner's avatar shows (on the left); our own messages * One chat row Messenger style: only the partner's avatar shows (on the left); our own messages
@ -391,7 +389,7 @@ private fun FullScreenImageViewer(
onClick = onDismiss, onClick = onDismiss,
modifier = Modifier.align(Alignment.TopEnd).padding(12.dp) modifier = Modifier.align(Alignment.TopEnd).padding(12.dp)
) { ) {
Icon(Icons.Filled.Close, contentDescription = "Close", tint = Color.White) Icon(CloserGlyphs.Close, contentDescription = "Close", tint = Color.White)
} }
} }
} }
@ -511,7 +509,7 @@ private fun ChatAvatar(url: String?, visible: Boolean) {
modifier = Modifier.size(size).clip(CircleShape).background(MaterialTheme.colorScheme.surfaceVariant), modifier = Modifier.size(size).clip(CircleShape).background(MaterialTheme.colorScheme.surfaceVariant),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Icon(Icons.Filled.Person, contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.size(16.dp)) Icon(CloserGlyphs.Person, contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.size(16.dp))
} }
} }
} }
@ -629,7 +627,7 @@ fun ChatComposer(
horizontalArrangement = Arrangement.spacedBy(8.dp) horizontalArrangement = Arrangement.spacedBy(8.dp)
) { ) {
IconButton(onClick = { finishRecording(send = false) }, modifier = Modifier.size(48.dp)) { IconButton(onClick = { finishRecording(send = false) }, modifier = Modifier.size(48.dp)) {
Icon(Icons.Filled.Close, contentDescription = "Cancel", tint = MaterialTheme.colorScheme.error) Icon(CloserGlyphs.Close, contentDescription = "Cancel", tint = MaterialTheme.colorScheme.error)
} }
Box(modifier = Modifier.size(10.dp).clip(CircleShape).background(MaterialTheme.colorScheme.error)) Box(modifier = Modifier.size(10.dp).clip(CircleShape).background(MaterialTheme.colorScheme.error))
Text( Text(
@ -730,7 +728,7 @@ private fun ComposerMediaButton(
} }
if (locked) { if (locked) {
Icon( Icon(
imageVector = Icons.Filled.Lock, imageVector = CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(12.dp).align(Alignment.BottomEnd) modifier = Modifier.size(12.dp).align(Alignment.BottomEnd)

View File

@ -28,9 +28,7 @@ import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
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.filled.AddAPhoto import androidx.compose.material.icons.filled.AddAPhoto
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.PhotoLibrary import androidx.compose.material.icons.filled.PhotoLibrary
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -80,6 +78,7 @@ import app.closer.ui.auth.AuthPrimaryDeep
import app.closer.ui.auth.authTextFieldColors import app.closer.ui.auth.authTextFieldColors
import coil.compose.AsyncImage import coil.compose.AsyncImage
import java.io.File import java.io.File
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -139,7 +138,7 @@ fun CreateProfileScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = viewModel::goBack) { IconButton(onClick = viewModel::goBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = AuthInk tint = AuthInk
) )
@ -394,12 +393,12 @@ private fun PhotoStep(
contentDescription = "Profile photo", contentDescription = "Profile photo",
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Crop, contentScale = ContentScale.Crop,
placeholder = rememberVectorPainter(Icons.Filled.Person), placeholder = rememberVectorPainter(CloserGlyphs.Person),
error = rememberVectorPainter(Icons.Filled.Person) error = rememberVectorPainter(CloserGlyphs.Person)
) )
} else { } else {
Icon( Icon(
Icons.Filled.Person, CloserGlyphs.Person,
contentDescription = "Profile photo", contentDescription = "Profile photo",
modifier = Modifier.size(64.dp), modifier = Modifier.size(64.dp),
tint = AuthMuted tint = AuthMuted

View File

@ -16,7 +16,6 @@ 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.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.TrendingUp import androidx.compose.material.icons.automirrored.filled.TrendingUp
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
@ -49,6 +48,7 @@ import app.closer.ui.settings.SettingsInk
import app.closer.ui.settings.SettingsMuted import app.closer.ui.settings.SettingsMuted
import app.closer.ui.settings.SettingsPrimaryDeep import app.closer.ui.settings.SettingsPrimaryDeep
import app.closer.ui.settings.SettingsSoft import app.closer.ui.settings.SettingsSoft
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -69,7 +69,7 @@ fun YourProgressScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = SettingsInk tint = SettingsInk
) )

View File

@ -20,8 +20,6 @@ import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -68,6 +66,7 @@ import app.closer.ui.settings.SettingsOnPrimary
import app.closer.ui.settings.SettingsPrimary import app.closer.ui.settings.SettingsPrimary
import app.closer.ui.settings.SettingsPrimaryDeep import app.closer.ui.settings.SettingsPrimaryDeep
import app.closer.ui.settings.SettingsSoft import app.closer.ui.settings.SettingsSoft
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -94,7 +93,7 @@ fun AcceptInviteScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = SettingsInk tint = SettingsInk
) )

View File

@ -20,11 +20,9 @@ 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.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.ContentCopy import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material.icons.filled.Share import androidx.compose.material.icons.filled.Share
import androidx.compose.foundation.border import androidx.compose.foundation.border
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -66,6 +64,7 @@ import app.closer.ui.settings.SettingsPrimary
import app.closer.ui.settings.SettingsPrimaryDeep import app.closer.ui.settings.SettingsPrimaryDeep
import app.closer.ui.settings.SettingsSoft import app.closer.ui.settings.SettingsSoft
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -102,7 +101,7 @@ fun CreateInviteScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = SettingsInk tint = SettingsInk
) )
@ -255,7 +254,7 @@ fun CreateInviteScreen(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
Icons.Filled.Lock, CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
tint = SettingsPrimaryDeep, tint = SettingsPrimaryDeep,
modifier = Modifier.size(16.dp) modifier = Modifier.size(16.dp)

View File

@ -16,7 +16,6 @@ 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.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.FavoriteBorder import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -53,6 +52,7 @@ import app.closer.ui.settings.SettingsOnPrimary
import app.closer.ui.settings.SettingsPrimary import app.closer.ui.settings.SettingsPrimary
import app.closer.ui.settings.SettingsPrimaryDeep import app.closer.ui.settings.SettingsPrimaryDeep
import app.closer.ui.settings.SettingsSoft import app.closer.ui.settings.SettingsSoft
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -84,7 +84,7 @@ fun InviteConfirmScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = SettingsInk tint = SettingsInk
) )

View File

@ -16,8 +16,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.Check
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -44,6 +42,7 @@ import app.closer.ui.auth.AuthOnPrimary
import app.closer.ui.auth.AuthPrimary import app.closer.ui.auth.AuthPrimary
import app.closer.ui.auth.AuthPrimaryDeep import app.closer.ui.auth.AuthPrimaryDeep
import app.closer.ui.theme.CloserPalette import app.closer.ui.theme.CloserPalette
import app.closer.ui.components.CloserGlyphs
private val WHY_ITEMS = listOf( private val WHY_ITEMS = listOf(
"Daily questions reveal together — both answer privately, then see each other's response at the same time.", "Daily questions reveal together — both answer privately, then see each other's response at the same time.",
@ -165,7 +164,7 @@ private fun WhyRow(text: String) {
modifier = Modifier.size(22.dp) modifier = Modifier.size(22.dp)
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Check, imageVector = CloserGlyphs.Check,
contentDescription = null, contentDescription = null,
tint = AuthOnPrimary, tint = AuthOnPrimary,
modifier = Modifier modifier = Modifier

View File

@ -27,8 +27,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Person
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -78,6 +76,7 @@ import app.closer.ui.settings.SettingsMuted
import app.closer.ui.settings.SettingsOnPrimary import app.closer.ui.settings.SettingsOnPrimary
import app.closer.ui.settings.SettingsPrimary import app.closer.ui.settings.SettingsPrimary
import app.closer.ui.settings.SettingsSoft import app.closer.ui.settings.SettingsSoft
import app.closer.ui.components.CloserGlyphs
// ── ViewModel ──────────────────────────────────────────────────────────────── // ── ViewModel ────────────────────────────────────────────────────────────────
@ -278,8 +277,8 @@ private fun PairAvatar(url: String, modifier: Modifier = Modifier) {
model = cleanUrl, model = cleanUrl,
contentDescription = null, contentDescription = null,
contentScale = ContentScale.Crop, contentScale = ContentScale.Crop,
placeholder = rememberVectorPainter(Icons.Filled.Person), placeholder = rememberVectorPainter(CloserGlyphs.Person),
error = rememberVectorPainter(Icons.Filled.Person), error = rememberVectorPainter(CloserGlyphs.Person),
modifier = modifier modifier = modifier
.clip(CircleShape) .clip(CircleShape)
.border(4.dp, Color.White, CircleShape) .border(4.dp, Color.White, CircleShape)
@ -295,7 +294,7 @@ private fun PairAvatar(url: String, modifier: Modifier = Modifier) {
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Icon( Icon(
Icons.Filled.Person, CloserGlyphs.Person,
contentDescription = null, contentDescription = null,
tint = SettingsPrimary, tint = SettingsPrimary,
modifier = Modifier.fillMaxSize(0.5f) modifier = Modifier.fillMaxSize(0.5f)

View File

@ -16,8 +16,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import app.closer.ui.components.CloserHeartLoader import app.closer.ui.components.CloserHeartLoader
@ -48,6 +46,7 @@ import app.closer.ui.settings.SettingsMuted
import app.closer.ui.settings.SettingsOnPrimary import app.closer.ui.settings.SettingsOnPrimary
import app.closer.ui.settings.SettingsPrimary import app.closer.ui.settings.SettingsPrimary
import app.closer.ui.settings.SettingsPrimaryDeep import app.closer.ui.settings.SettingsPrimaryDeep
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun RecoveryScreen( fun RecoveryScreen(
@ -83,7 +82,7 @@ fun RecoveryScreen(
Spacer(Modifier.height(48.dp)) Spacer(Modifier.height(48.dp))
StatusGlyph( StatusGlyph(
icon = Icons.Filled.Lock, icon = CloserGlyphs.Lock,
tint = SettingsPrimaryDeep, tint = SettingsPrimaryDeep,
container = SettingsPrimary.copy(alpha = 0.12f) container = SettingsPrimary.copy(alpha = 0.12f)
) )

View File

@ -27,8 +27,6 @@ import androidx.compose.foundation.selection.selectable
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.Icons
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -70,6 +68,8 @@ import app.closer.ui.components.ErrorState
import app.closer.ui.components.LoadingState import app.closer.ui.components.LoadingState
import app.closer.ui.theme.CloserPalette import app.closer.ui.theme.CloserPalette
import com.revenuecat.purchases.Package import com.revenuecat.purchases.Package
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Close
private val BENEFITS = listOf( private val BENEFITS = listOf(
"Unlimited questions every day", "Unlimited questions every day",

View File

@ -16,13 +16,6 @@ import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowForward
import androidx.compose.material.icons.filled.Done
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.Home
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.Star
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
@ -53,6 +46,7 @@ import app.closer.ui.components.CloserPill
import app.closer.ui.components.CloserRadii import app.closer.ui.components.CloserRadii
import app.closer.ui.theme.closerBackgroundBrush import app.closer.ui.theme.closerBackgroundBrush
import app.closer.ui.theme.closerPlayCardBrush import app.closer.ui.theme.closerPlayCardBrush
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun PlayHubScreen( fun PlayHubScreen(
@ -280,7 +274,7 @@ private fun ThisOrThatCard(
) )
} }
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowForward, imageVector = CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier.size(18.dp) modifier = Modifier.size(18.dp)
@ -351,7 +345,7 @@ private fun DesireSyncCard(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Lock, imageVector = CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier.size(13.dp) modifier = Modifier.size(13.dp)
@ -375,7 +369,7 @@ private fun DesireSyncCard(
) )
} }
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowForward, imageVector = CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier.size(18.dp) modifier = Modifier.size(18.dp)
@ -448,7 +442,7 @@ private fun HowWellCard(
) )
} }
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowForward, imageVector = CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier.size(18.dp) modifier = Modifier.size(18.dp)
@ -522,7 +516,7 @@ private fun ConnectionChallengesCard(
) )
} }
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowForward, imageVector = CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(18.dp) modifier = Modifier.size(18.dp)
@ -592,7 +586,7 @@ private fun MemoryLaneCard(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Lock, imageVector = CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier.size(13.dp) modifier = Modifier.size(13.dp)
@ -616,7 +610,7 @@ private fun MemoryLaneCard(
) )
} }
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowForward, imageVector = CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier.size(18.dp) modifier = Modifier.size(18.dp)
@ -759,7 +753,7 @@ private fun CompactPlayCard(
) { ) {
if (locked) { if (locked) {
Icon( Icon(
imageVector = Icons.Filled.Lock, imageVector = CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.tertiary, tint = MaterialTheme.colorScheme.tertiary,
modifier = Modifier.size(11.dp) modifier = Modifier.size(11.dp)
@ -774,7 +768,7 @@ private fun CompactPlayCard(
) )
} }
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowForward, imageVector = CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
tint = tint, tint = tint,
modifier = Modifier.size(18.dp) modifier = Modifier.size(18.dp)

View File

@ -26,8 +26,6 @@ import androidx.compose.foundation.shape.CircleShape
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.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -59,6 +57,7 @@ import app.closer.ui.components.ErrorState
import app.closer.ui.components.LoadingState import app.closer.ui.components.LoadingState
import app.closer.ui.questions.components.QuestionAnswerInput import app.closer.ui.questions.components.QuestionAnswerInput
import app.closer.ui.questions.components.QuestionHeader import app.closer.ui.questions.components.QuestionHeader
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun LocalQuestionContent( fun LocalQuestionContent(
@ -97,7 +96,7 @@ fun LocalQuestionContent(
if (onBack != null) { if (onBack != null) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = CloserGlyphs.Back,
contentDescription = "Back" contentDescription = "Back"
) )
} }
@ -277,7 +276,7 @@ private fun SubmittedAnswerCard(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Icon( Icon(
imageVector = if (state.isRevealed) Icons.Filled.Visibility else Icons.Filled.Lock, imageVector = if (state.isRevealed) Icons.Filled.Visibility else CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.onPrimaryContainer, tint = MaterialTheme.colorScheme.onPrimaryContainer,
modifier = Modifier.size(18.dp) modifier = Modifier.size(18.dp)

View File

@ -23,8 +23,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -55,6 +53,7 @@ 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 app.closer.ui.components.CategoryGlyph import app.closer.ui.components.CategoryGlyph
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun QuestionCategoryScreen( fun QuestionCategoryScreen(
@ -113,7 +112,7 @@ private fun QuestionCategoryContent(
) { ) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = MaterialTheme.colorScheme.onBackground tint = MaterialTheme.colorScheme.onBackground
) )

View File

@ -20,8 +20,6 @@ import androidx.compose.foundation.layout.safeDrawingPadding
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.automirrored.filled.ArrowBack
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -48,6 +46,7 @@ import app.closer.ui.questions.components.AnswerBubble
import app.closer.ui.questions.components.QuestionAnswerInput import app.closer.ui.questions.components.QuestionAnswerInput
import app.closer.ui.questions.components.QuestionHeader import app.closer.ui.questions.components.QuestionHeader
import app.closer.ui.theme.closerBackgroundBrush import app.closer.ui.theme.closerBackgroundBrush
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun QuestionThreadScreen( fun QuestionThreadScreen(
@ -77,7 +76,7 @@ fun QuestionThreadScreen(
) { ) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = CloserGlyphs.Back,
contentDescription = "Back" contentDescription = "Back"
) )
} }

View File

@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Person
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
@ -35,6 +34,7 @@ import androidx.compose.ui.unit.dp
import app.closer.domain.model.Question import app.closer.domain.model.Question
import app.closer.domain.model.QuestionAnswer import app.closer.domain.model.QuestionAnswer
import app.closer.domain.model.QuestionReaction import app.closer.domain.model.QuestionReaction
import androidx.compose.material.icons.filled.Person
private val REACTION_EMOJIS = listOf("❤️", "😊", "😂", "😮", "👏", "🥺") private val REACTION_EMOJIS = listOf("❤️", "😊", "😂", "😮", "👏", "🥺")

View File

@ -25,7 +25,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Send import androidx.compose.material.icons.automirrored.filled.Send
import androidx.compose.material.icons.filled.Image import androidx.compose.material.icons.filled.Image
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.PhotoCamera import androidx.compose.material.icons.filled.PhotoCamera
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
@ -61,6 +60,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun QuestionDiscussionThread( fun QuestionDiscussionThread(
@ -261,7 +261,7 @@ private fun MessageAvatar(url: String?, visible: Boolean) {
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Person, imageVector = CloserGlyphs.Person,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(16.dp) modifier = Modifier.size(16.dp)

View File

@ -14,8 +14,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
@ -27,6 +25,8 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.closer.domain.model.Question import app.closer.domain.model.Question
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Close
@Composable @Composable
fun QuestionHelpExpandable( fun QuestionHelpExpandable(

View File

@ -6,9 +6,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.ArrowForward
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -19,6 +16,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun QuestionNavigationBar( fun QuestionNavigationBar(
@ -46,7 +44,7 @@ fun QuestionNavigationBar(
) )
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = CloserGlyphs.Back,
contentDescription = null, contentDescription = null,
modifier = Modifier.padding(end = 4.dp) modifier = Modifier.padding(end = 4.dp)
) )
@ -75,7 +73,7 @@ fun QuestionNavigationBar(
fontWeight = FontWeight.Medium fontWeight = FontWeight.Medium
) )
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowForward, imageVector = CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
modifier = Modifier.padding(start = 4.dp) modifier = Modifier.padding(start = 4.dp)
) )

View File

@ -17,8 +17,6 @@ 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.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.ArrowForwardIos
import androidx.compose.material.icons.filled.ContentCopy import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.Key import androidx.compose.material.icons.filled.Key
@ -54,6 +52,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.R import app.closer.R
import app.closer.core.navigation.AppRoute import app.closer.core.navigation.AppRoute
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -77,7 +76,7 @@ fun AccountScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = stringResource(R.string.action_back), contentDescription = stringResource(R.string.action_back),
tint = SettingsInk tint = SettingsInk
) )
@ -221,7 +220,7 @@ private fun AccountRow(
) )
if (enabled) { if (enabled) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowForwardIos, CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(14.dp), modifier = Modifier.size(14.dp),
tint = SettingsMuted tint = SettingsMuted

View File

@ -15,8 +15,6 @@ import androidx.compose.foundation.layout.safeDrawingPadding
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.automirrored.filled.ArrowBack
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Divider import androidx.compose.material3.Divider
@ -40,6 +38,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.R import app.closer.R
import app.closer.domain.repository.ThemeMode import app.closer.domain.repository.ThemeMode
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -58,7 +57,7 @@ fun AppearanceScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = stringResource(R.string.action_back), contentDescription = stringResource(R.string.action_back),
tint = SettingsInk tint = SettingsInk
) )

View File

@ -31,8 +31,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.material3.Checkbox import androidx.compose.material3.Checkbox
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -62,6 +60,7 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.ui.components.CloserGlyphs
data class DeleteAccountUiState( data class DeleteAccountUiState(
val showConfirm: Boolean = false, val showConfirm: Boolean = false,
@ -278,7 +277,7 @@ fun DeleteAccountScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = SettingsInk tint = SettingsInk
) )

View File

@ -27,10 +27,7 @@ import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
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.filled.AddAPhoto import androidx.compose.material.icons.filled.AddAPhoto
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.PhotoLibrary import androidx.compose.material.icons.filled.PhotoLibrary
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -79,6 +76,7 @@ import app.closer.ui.settings.SettingsMuted
import app.closer.ui.settings.SettingsOnPrimary import app.closer.ui.settings.SettingsOnPrimary
import app.closer.ui.settings.SettingsPrimary import app.closer.ui.settings.SettingsPrimary
import app.closer.ui.settings.SettingsPrimaryDeep import app.closer.ui.settings.SettingsPrimaryDeep
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -98,7 +96,7 @@ fun EditProfileScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = SettingsInk tint = SettingsInk
) )
@ -197,12 +195,12 @@ fun EditProfileContent(
contentDescription = "Profile photo", contentDescription = "Profile photo",
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Crop, contentScale = ContentScale.Crop,
placeholder = rememberVectorPainter(Icons.Filled.Person), placeholder = rememberVectorPainter(CloserGlyphs.Person),
error = rememberVectorPainter(Icons.Filled.Person) error = rememberVectorPainter(CloserGlyphs.Person)
) )
} else { } else {
Icon( Icon(
Icons.Filled.Person, CloserGlyphs.Person,
contentDescription = "Profile photo", contentDescription = "Profile photo",
modifier = Modifier.size(56.dp), modifier = Modifier.size(56.dp),
tint = SettingsMuted tint = SettingsMuted
@ -407,7 +405,7 @@ private fun SexEditOption(
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
if (selected) { if (selected) {
Icon( Icon(
Icons.Filled.Check, CloserGlyphs.Check,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(18.dp).padding(end = 6.dp), modifier = Modifier.size(18.dp).padding(end = 6.dp),
tint = contentColor tint = contentColor

View File

@ -29,8 +29,6 @@ import androidx.compose.foundation.layout.safeDrawingPadding
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.automirrored.filled.ArrowBack
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Divider import androidx.compose.material3.Divider
@ -55,6 +53,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.R import app.closer.R
import app.closer.ui.components.CloserGlyphs
data class NotificationSettingsUiState( data class NotificationSettingsUiState(
val dailyReminderEnabled: Boolean = true, val dailyReminderEnabled: Boolean = true,
@ -155,7 +154,7 @@ fun NotificationSettingsScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = stringResource(R.string.action_back), contentDescription = stringResource(R.string.action_back),
tint = SettingsInk tint = SettingsInk
) )

View File

@ -19,11 +19,7 @@ import androidx.compose.foundation.shape.CircleShape
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.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.OpenInNew import androidx.compose.material.icons.automirrored.filled.OpenInNew
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Divider import androidx.compose.material3.Divider
@ -47,6 +43,10 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.closer.R import app.closer.R
import app.closer.core.navigation.ExternalLinks import app.closer.core.navigation.ExternalLinks
import app.closer.ui.components.CloserGlyphs
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.VisibilityOff
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -64,7 +64,7 @@ fun PrivacyScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = stringResource(R.string.action_back), contentDescription = stringResource(R.string.action_back),
tint = SettingsInk tint = SettingsInk
) )

View File

@ -27,8 +27,6 @@ import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@ -53,6 +51,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.ui.components.CloserGlyphs
data class RelationshipSettingsUiState( data class RelationshipSettingsUiState(
val showLeaveConfirm: Boolean = false, val showLeaveConfirm: Boolean = false,
@ -136,7 +135,7 @@ fun RelationshipSettingsScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = SettingsInk tint = SettingsInk
) )

View File

@ -20,7 +20,6 @@ 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.Icons
import androidx.compose.material.icons.filled.Fingerprint import androidx.compose.material.icons.filled.Fingerprint
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
@ -60,6 +59,7 @@ import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
import app.closer.ui.components.CloserGlyphs
data class SecurityUiState( data class SecurityUiState(
val biometricLoginEnabled: Boolean = false, val biometricLoginEnabled: Boolean = false,
@ -235,7 +235,7 @@ fun SecurityScreen(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(12.dp) horizontalArrangement = Arrangement.spacedBy(12.dp)
) { ) {
Icon(Icons.Filled.Lock, contentDescription = null, tint = SettingsMuted) Icon(CloserGlyphs.Lock, contentDescription = null, tint = SettingsMuted)
Text( Text(
text = "Recovery phrase", text = "Recovery phrase",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,

View File

@ -22,17 +22,11 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
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.ArrowForwardIos
import androidx.compose.material.icons.automirrored.filled.TrendingUp import androidx.compose.material.icons.automirrored.filled.TrendingUp
import androidx.compose.material.icons.filled.Done
import androidx.compose.material.icons.filled.Favorite import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.FavoriteBorder import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.Notifications import androidx.compose.material.icons.filled.Notifications
import androidx.compose.material.icons.filled.Palette import androidx.compose.material.icons.filled.Palette
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -80,6 +74,7 @@ import app.closer.ui.settings.SettingsMuted
import app.closer.ui.settings.SettingsPrimaryDeep import app.closer.ui.settings.SettingsPrimaryDeep
import app.closer.ui.settings.SettingsSoft import app.closer.ui.settings.SettingsSoft
import coil.compose.AsyncImage import coil.compose.AsyncImage
import app.closer.ui.components.CloserGlyphs
// ==================== // ====================
// Settings Subpages // Settings Subpages
@ -104,7 +99,7 @@ fun SettingsSubpage(
navigationIcon = { navigationIcon = {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowBack, CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = SettingsInk tint = SettingsInk
) )
@ -334,7 +329,7 @@ fun SettingsScreen(
) { ) {
ProfileAvatar( ProfileAvatar(
imageUrl = state.photoUrl, imageUrl = state.photoUrl,
fallbackIcon = Icons.Filled.Person, fallbackIcon = CloserGlyphs.Person,
fallbackTint = SettingsPrimaryDeep fallbackTint = SettingsPrimaryDeep
) )
Column( Column(
@ -358,7 +353,7 @@ fun SettingsScreen(
) )
} }
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowForwardIos, CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(16.dp), modifier = Modifier.size(16.dp),
tint = SettingsPrimaryDeep tint = SettingsPrimaryDeep
@ -400,7 +395,7 @@ fun SettingsScreen(
if (state.isPaired) { if (state.isPaired) {
ProfileAvatar( ProfileAvatar(
imageUrl = state.partnerPhotoUrl, imageUrl = state.partnerPhotoUrl,
fallbackIcon = Icons.Filled.Favorite, fallbackIcon = CloserGlyphs.Heart,
fallbackTint = SettingsPrimaryDeep fallbackTint = SettingsPrimaryDeep
) )
} else { } else {
@ -451,7 +446,7 @@ fun SettingsScreen(
} }
} }
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowForwardIos, CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(16.dp), modifier = Modifier.size(16.dp),
tint = partnerAccent tint = partnerAccent
@ -461,7 +456,7 @@ fun SettingsScreen(
SettingsSection(title = "For the two of you", accent = Color(0xFFF7C8E4)) { SettingsSection(title = "For the two of you", accent = Color(0xFFF7C8E4)) {
SettingsRow( SettingsRow(
icon = Icons.Filled.Favorite, icon = CloserGlyphs.Heart,
label = "Together", label = "Together",
subtitle = "Your shared activity, answers, and milestones", subtitle = "Your shared activity, answers, and milestones",
onClick = { onNavigate(AppRoute.ACTIVITY) }, onClick = { onNavigate(AppRoute.ACTIVITY) },
@ -470,14 +465,14 @@ fun SettingsScreen(
SettingsSectionDivider() SettingsSectionDivider()
if (app.closer.BuildConfig.DEBUG) { if (app.closer.BuildConfig.DEBUG) {
SettingsRow( SettingsRow(
icon = Icons.Filled.Favorite, icon = CloserGlyphs.Heart,
label = "Art preview (debug)", label = "Art preview (debug)",
subtitle = "Preview celebration art without pairing", subtitle = "Preview celebration art without pairing",
onClick = { onNavigate(AppRoute.ART_PREVIEW) } onClick = { onNavigate(AppRoute.ART_PREVIEW) }
) )
SettingsSectionDivider() SettingsSectionDivider()
SettingsRow( SettingsRow(
icon = Icons.Filled.Favorite, icon = CloserGlyphs.Heart,
label = "Paired home (debug)", label = "Paired home (debug)",
subtitle = "Preview the paired Home without pairing", subtitle = "Preview the paired Home without pairing",
onClick = { onNavigate(AppRoute.PAIRED_HOME_PREVIEW) } onClick = { onNavigate(AppRoute.PAIRED_HOME_PREVIEW) }
@ -485,7 +480,7 @@ fun SettingsScreen(
SettingsSectionDivider() SettingsSectionDivider()
} }
SettingsRow( SettingsRow(
icon = Icons.Filled.Done, icon = CloserGlyphs.Check,
label = "Answer History", label = "Answer History",
subtitle = "Revisit the moments you have shared", subtitle = "Revisit the moments you have shared",
onClick = { onNavigate(AppRoute.ANSWER_HISTORY) } onClick = { onNavigate(AppRoute.ANSWER_HISTORY) }
@ -670,7 +665,7 @@ private fun SettingsRow(
} }
} }
Icon( Icon(
Icons.AutoMirrored.Filled.ArrowForwardIos, CloserGlyphs.Forward,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(14.dp), modifier = Modifier.size(14.dp),
tint = SettingsMuted tint = SettingsMuted

View File

@ -19,7 +19,6 @@ 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.Icons
import androidx.compose.material.icons.automirrored.filled.OpenInNew import androidx.compose.material.icons.automirrored.filled.OpenInNew
import androidx.compose.material.icons.filled.Check
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -70,6 +69,7 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import app.closer.ui.components.CloserGlyphs
private val BENEFITS = listOf( private val BENEFITS = listOf(
"Unlimited questions every day", "Unlimited questions every day",
@ -250,7 +250,7 @@ private fun PremiumContent(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Check, imageVector = CloserGlyphs.Check,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(16.dp) modifier = Modifier.size(16.dp)
@ -351,7 +351,7 @@ private fun FreeContent(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Icon( Icon(
imageVector = Icons.Filled.Check, imageVector = CloserGlyphs.Check,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(16.dp) modifier = Modifier.size(16.dp)

View File

@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.automirrored.filled.ArrowForward
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.Button import androidx.compose.material3.Button
@ -44,6 +43,7 @@ import app.closer.ui.components.CategoryGlyph
import app.closer.ui.questions.displayCategoryName import app.closer.ui.questions.displayCategoryName
import app.closer.ui.theme.CloserPalette import app.closer.ui.theme.CloserPalette
import app.closer.ui.theme.closerBackgroundBrush import app.closer.ui.theme.closerBackgroundBrush
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun CategoryPickerScreen( fun CategoryPickerScreen(
@ -291,7 +291,7 @@ private fun CategoryCard(
} }
} }
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowForward, imageVector = CloserGlyphs.Forward,
contentDescription = if (item.isLocked) "Unlock" else "Spin", contentDescription = if (item.isLocked) "Unlock" else "Spin",
tint = if (item.isLocked) MaterialTheme.colorScheme.outline else CloserPalette.PurpleDeep, tint = if (item.isLocked) MaterialTheme.colorScheme.outline else CloserPalette.PurpleDeep,
modifier = Modifier.size(20.dp) modifier = Modifier.size(20.dp)

View File

@ -27,9 +27,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import app.closer.ui.components.CloserHeartLoader import app.closer.ui.components.CloserHeartLoader
@ -65,6 +62,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
import app.closer.R import app.closer.R
import app.closer.ui.theme.CloserPalette import app.closer.ui.theme.CloserPalette
import app.closer.ui.theme.closerBackgroundBrush import app.closer.ui.theme.closerBackgroundBrush
import app.closer.ui.components.CloserGlyphs
@Composable @Composable
fun SpinWheelScreen( fun SpinWheelScreen(
@ -126,7 +124,7 @@ private fun SpinWheelContent(
) { ) {
IconButton(onClick = onBack) { IconButton(onClick = onBack) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = CloserGlyphs.Back,
contentDescription = "Back", contentDescription = "Back",
tint = MaterialTheme.colorScheme.onBackground tint = MaterialTheme.colorScheme.onBackground
) )
@ -240,7 +238,7 @@ private fun SpinWheelContent(
) { ) {
if (!state.hasPremium) { if (!state.hasPremium) {
Icon( Icon(
imageVector = Icons.Filled.Lock, imageVector = CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(14.dp) modifier = Modifier.size(14.dp)
) )
@ -309,7 +307,7 @@ private fun ChooseCategoryButton(hasPremium: Boolean, onClick: () -> Unit) {
) { ) {
if (!hasPremium) { if (!hasPremium) {
Icon( Icon(
imageVector = Icons.Filled.Lock, imageVector = CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(14.dp) modifier = Modifier.size(14.dp)
) )

View File

@ -20,8 +20,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -67,6 +65,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import app.closer.ui.components.CloserGlyphs
// ── ViewModel ────────────────────────────────────────────────────────────────── // ── ViewModel ──────────────────────────────────────────────────────────────────
@ -277,7 +276,7 @@ private fun WheelWaitingContent(
Spacer(Modifier.weight(1f)) Spacer(Modifier.weight(1f))
StatusGlyph( StatusGlyph(
icon = Icons.Filled.Check, icon = CloserGlyphs.Check,
tint = CloserPalette.PurpleDeep, tint = CloserPalette.PurpleDeep,
container = CloserPalette.PurpleMist, container = CloserPalette.PurpleMist,
size = 82.dp, size = 82.dp,
@ -342,7 +341,7 @@ private fun WheelRevealContent(
verticalArrangement = Arrangement.spacedBy(8.dp) verticalArrangement = Arrangement.spacedBy(8.dp)
) { ) {
StatusGlyph( StatusGlyph(
icon = Icons.Filled.Check, icon = CloserGlyphs.Check,
tint = CloserPalette.PurpleDeep, tint = CloserPalette.PurpleDeep,
container = CloserPalette.PurpleMist, container = CloserPalette.PurpleMist,
size = 72.dp, size = 72.dp,

View File

@ -18,9 +18,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -57,6 +54,7 @@ import app.closer.ui.questions.displayCategoryName
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
import java.util.Locale import java.util.Locale
import app.closer.ui.components.CloserGlyphs
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -72,7 +70,7 @@ fun GameHistoryScreen(
title = { Text("Past Games") }, title = { Text("Past Games") },
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate("back") }) { IconButton(onClick = { onNavigate("back") }) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") Icon(CloserGlyphs.Back, contentDescription = "Back")
} }
} }
) )
@ -358,7 +356,7 @@ private fun GameHistoryLockedCard(onUnlock: () -> Unit) {
color = MaterialTheme.colorScheme.surfaceVariant color = MaterialTheme.colorScheme.surfaceVariant
) { ) {
Icon( Icon(
Icons.Filled.Lock, CloserGlyphs.Lock,
contentDescription = null, contentDescription = null,
modifier = Modifier.padding(16.dp).size(28.dp), modifier = Modifier.padding(16.dp).size(28.dp),
tint = MaterialTheme.colorScheme.primary tint = MaterialTheme.colorScheme.primary