v0.2.4: One UI 9 & Material 3 Expressive UI/UX Redesign

This commit is contained in:
2026-08-20 23:28:53 +00:00
parent ef55fae424
commit 779ddb497d
@@ -10,6 +10,7 @@ import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
@@ -18,117 +19,131 @@ import androidx.core.view.WindowCompat
import com.hotdeal.alarm.domain.model.SiteType
// ============================================
// Material You Style - Premium Color Palette
// One UI 9 & Material 3 Expressive Color Palette
// ============================================
// Light Theme - Premium Palette
private val LightPrimary = Color(0xFF0061A4)
// Light Theme - Clean Frost & Vibrant Indigo
private val LightPrimary = Color(0xFF2563EB) // Electric Indigo
private val LightOnPrimary = Color(0xFFFFFFFF)
private val LightPrimaryContainer = Color(0xFFD1E4FF)
private val LightOnPrimaryContainer = Color(0xFF001D36)
private val LightPrimaryContainer = Color(0xFFDBEAFE)
private val LightOnPrimaryContainer = Color(0xFF1E3A8A)
private val LightSecondary = Color(0xFF535F70)
private val LightSecondary = Color(0xFF475569) // Slate
private val LightOnSecondary = Color(0xFFFFFFFF)
private val LightSecondaryContainer = Color(0xFFD7E3F8)
private val LightOnSecondaryContainer = Color(0xFF101C2B)
private val LightSecondaryContainer = Color(0xFFF1F5F9)
private val LightOnSecondaryContainer = Color(0xFF0F172A)
private val LightTertiary = Color(0xFF6B5778)
private val LightTertiary = Color(0xFF0D9488) // Modern Teal
private val LightOnTertiary = Color(0xFFFFFFFF)
private val LightTertiaryContainer = Color(0xFFF2DAFF)
private val LightOnTertiaryContainer = Color(0xFF251431)
private val LightTertiaryContainer = Color(0xFFCCFBF1)
private val LightOnTertiaryContainer = Color(0xFF115E59)
private val LightBackground = Color(0xFFFDFCFF)
private val LightOnBackground = Color(0xFF1A1C1E)
private val LightSurface = Color(0xFFFDFCFF)
private val LightOnSurface = Color(0xFF1A1C1E)
private val LightSurfaceVariant = Color(0xFFDFE2EB)
private val LightOnSurfaceVariant = Color(0xFF43474E)
private val LightBackground = Color(0xFFF8FAFC) // Clean Ultra Frost
private val LightOnBackground = Color(0xFF0F172A)
private val LightSurface = Color(0xFFFFFFFF)
private val LightOnSurface = Color(0xFF0F172A)
private val LightSurfaceVariant = Color(0xFFF1F5F9)
private val LightOnSurfaceVariant = Color(0xFF475569)
private val LightError = Color(0xFFBA1A1A)
private val LightError = Color(0xFFDC2626)
private val LightOnError = Color(0xFFFFFFFF)
private val LightErrorContainer = Color(0xFFFFDAD6)
private val LightOnErrorContainer = Color(0xFF410002)
private val LightErrorContainer = Color(0xFFFEE2E2)
private val LightOnErrorContainer = Color(0xFF991B1B)
private val LightOutline = Color(0xFF73777F)
private val LightOutlineVariant = Color(0xFFC3C6CF)
private val LightInverseSurface = Color(0xFF2F3033)
private val LightInverseOnSurface = Color(0xFFF1F0F4)
private val LightInversePrimary = Color(0xFF9ECAFF)
private val LightSurfaceTint = Color(0xFF0061A4)
private val LightOutline = Color(0xFF94A3B8)
private val LightOutlineVariant = Color(0xFFE2E8F0)
private val LightInverseSurface = Color(0xFF0F172A)
private val LightInverseOnSurface = Color(0xFFF8FAFC)
private val LightInversePrimary = Color(0xFF60A5FA)
private val LightSurfaceTint = Color(0xFF2563EB)
// Dark Theme - Premium Palette
private val DarkPrimary = Color(0xFF9ECAFF)
private val DarkOnPrimary = Color(0xFF003258)
private val DarkPrimaryContainer = Color(0xFF00497D)
private val DarkOnPrimaryContainer = Color(0xFFD1E4FF)
// Dark Theme - Deep OLED Slate (One UI 9)
private val DarkPrimary = Color(0xFF60A5FA) // Luminous Indigo
private val DarkOnPrimary = Color(0xFF0F172A)
private val DarkPrimaryContainer = Color(0xFF1E3A8A)
private val DarkOnPrimaryContainer = Color(0xFFDBEAFE)
private val DarkSecondary = Color(0xFFBBC7DB)
private val DarkOnSecondary = Color(0xFF253140)
private val DarkSecondaryContainer = Color(0xFF3B4858)
private val DarkOnSecondaryContainer = Color(0xFFD7E3F8)
private val DarkSecondary = Color(0xFF94A3B8)
private val DarkOnSecondary = Color(0xFF0F172A)
private val DarkSecondaryContainer = Color(0xFF1E293B)
private val DarkOnSecondaryContainer = Color(0xFFF1F5F9)
private val DarkTertiary = Color(0xFFD6BEE4)
private val DarkOnTertiary = Color(0xFF3B2948)
private val DarkTertiaryContainer = Color(0xFF523F5F)
private val DarkOnTertiaryContainer = Color(0xFFF2DAFF)
private val DarkTertiary = Color(0xFF2DD4BF)
private val DarkOnTertiary = Color(0xFF042F2E)
private val DarkTertiaryContainer = Color(0xFF115E59)
private val DarkOnTertiaryContainer = Color(0xFFCCFBF1)
private val DarkBackground = Color(0xFF1A1C1E)
private val DarkOnBackground = Color(0xFFE2E2E6)
private val DarkSurface = Color(0xFF1A1C1E)
private val DarkOnSurface = Color(0xFFE2E2E6)
private val DarkSurfaceVariant = Color(0xFF43474E)
private val DarkOnSurfaceVariant = Color(0xFFC3C6CF)
private val DarkBackground = Color(0xFF0B0F19) // Deep OLED Slate
private val DarkOnBackground = Color(0xFFF1F5F9)
private val DarkSurface = Color(0xFF111827) // Elev 1
private val DarkOnSurface = Color(0xFFF1F5F9)
private val DarkSurfaceVariant = Color(0xFF1F2937) // Elev 2
private val DarkOnSurfaceVariant = Color(0xFF9CA3AF)
private val DarkError = Color(0xFFFFB4AB)
private val DarkOnError = Color(0xFF690005)
private val DarkErrorContainer = Color(0xFF93000A)
private val DarkOnErrorContainer = Color(0xFFFFDAD6)
private val DarkError = Color(0xFFF87171)
private val DarkOnError = Color(0xFF450A0A)
private val DarkErrorContainer = Color(0xFF7F1D1D)
private val DarkOnErrorContainer = Color(0xFFFECACA)
private val DarkOutline = Color(0xFF8D9199)
private val DarkOutlineVariant = Color(0xFF43474E)
private val DarkInverseSurface = Color(0xFFE2E2E6)
private val DarkInverseOnSurface = Color(0xFF2F3033)
private val DarkInversePrimary = Color(0xFF0061A4)
private val DarkSurfaceTint = Color(0xFF9ECAFF)
private val DarkOutline = Color(0xFF4B5563)
private val DarkOutlineVariant = Color(0xFF374151)
private val DarkInverseSurface = Color(0xFFF1F5F9)
private val DarkInverseOnSurface = Color(0xFF0F172A)
private val DarkInversePrimary = Color(0xFF2563EB)
private val DarkSurfaceTint = Color(0xFF60A5FA)
// ============================================
// Site Colors - Premium Tones
// One UI 9 Premium Accents & Brand Tones
// ============================================
// 뽐뿌 - Premium Pink
val PpomppuColor = Color(0xFFE91E63)
val PpomppuColorLight = Color(0xFFFCE4EC)
val PpomppuColorDark = Color(0xFFC2185B)
// 뽐뿌 - Rose Magenta
val PpomppuColor = Color(0xFFE11D48)
val PpomppuColorLight = Color(0xFFFFF1F2)
val PpomppuColorDark = Color(0xFF881337)
// 클리앙 - Premium Green
val ClienColor = Color(0xFF2E7D32)
val ClienColorLight = Color(0xFFE8F5E9)
val ClienColorDark = Color(0xFF1B5E20)
// 클리앙 - Emerald Green
val ClienColor = Color(0xFF059669)
val ClienColorLight = Color(0xFFECFDF5)
val ClienColorDark = Color(0xFF064E3B)
// 루리웹 - Premium Blue
val RuriwebColor = Color(0xFF1565C0)
val RuriwebColorLight = Color(0xFFE3F2FD)
val RuriwebColorDark = Color(0xFF0D47A1)
// 루리웹 - Royal Cobalt
val RuriwebColor = Color(0xFF2563EB)
val RuriwebColorLight = Color(0xFFEFF6FF)
val RuriwebColorDark = Color(0xFF1E3A8A)
// 쿨엔조이 - Premium Orange
val CoolenjoyColor = Color(0xFFEF6C00)
val CoolenjoyColorLight = Color(0xFFFFF3E0)
val CoolenjoyColorDark = Color(0xFFE65100)
// 쿨엔조이 - Neon Sunset Orange
val CoolenjoyColor = Color(0xFFEA580C)
val CoolenjoyColorLight = Color(0xFFFFF7ED)
val CoolenjoyColorDark = Color(0xFF7C2D12)
// 아카라이브 - Premium Teal
val ArcaLiveColor = Color(0xFF00897B)
val ArcaLiveColorLight = Color(0xFFE0F2F1)
val ArcaLiveColorDark = Color(0xFF004D40)
// 아카라이브 - Vibrant Emerald Teal
val ArcaLiveColor = Color(0xFF0D9488)
val ArcaLiveColorLight = Color(0xFFF0FDFA)
val ArcaLiveColorDark = Color(0xFF134E4A)
// Keyword Match - Light Red Theme
val KeywordMatchColor = Color(0xFFE53935)
val KeywordMatchColorLight = Color(0xFFFFEBEE)
// Hot / Popular Flame
val HotDealFlameColor = Color(0xFFFF5722)
val HotDealFlameGradient = Brush.horizontalGradient(
listOf(Color(0xFFFF3D00), Color(0xFFFF9100))
)
// Favorite - Premium Red
val FavoriteColor = Color(0xFFE53935)
// Keyword Match - Amber Gold Luxury Glow
val KeywordGold = Color(0xFFF59E0B)
val KeywordGoldLight = Color(0xFFFEF3C7)
val KeywordGoldDark = Color(0xFF78350F)
val KeywordGoldGradient = Brush.horizontalGradient(
listOf(Color(0xFFF59E0B), Color(0xFFD97706))
)
// Favorite - Premium Crimson Heart
val FavoriteColor = Color(0xFFEF4444)
// One UI 9 Micro Rim Border Color
val AmbientBorderColorLight = Color(0x1F0F172A)
val AmbientBorderColorDark = Color(0x33FFFFFF)
/**
* 사이트별 색상 가져오기
* 사이트별 대표 색상
*/
fun getSiteColor(siteType: SiteType?): Color {
return when (siteType) {
@@ -137,12 +152,12 @@ fun getSiteColor(siteType: SiteType?): Color {
SiteType.RURIWEB -> RuriwebColor
SiteType.COOLENJOY -> CoolenjoyColor
SiteType.ARCALIVE -> ArcaLiveColor
null -> Color.Gray
null -> Color(0xFF64748B)
}
}
/**
* 사이트별 라이트 배경색 가져오기
* 사이트별 라이트 소프트 틴트
*/
fun getSiteColorLight(siteType: SiteType?): Color {
return when (siteType) {
@@ -151,12 +166,12 @@ fun getSiteColorLight(siteType: SiteType?): Color {
SiteType.RURIWEB -> RuriwebColorLight
SiteType.COOLENJOY -> CoolenjoyColorLight
SiteType.ARCALIVE -> ArcaLiveColorLight
null -> Color.LightGray.copy(alpha = 0.3f)
null -> Color(0xFFF1F5F9)
}
}
/**
* 사이트별 다크 배경색 가져오기
* 사이트별 다크 서브 틴트
*/
fun getSiteColorDark(siteType: SiteType?): Color {
return when (siteType) {
@@ -165,7 +180,7 @@ fun getSiteColorDark(siteType: SiteType?): Color {
SiteType.RURIWEB -> RuriwebColorDark
SiteType.COOLENJOY -> CoolenjoyColorDark
SiteType.ARCALIVE -> ArcaLiveColorDark
null -> Color.DarkGray
null -> Color(0xFF1E293B)
}
}
@@ -254,9 +269,9 @@ fun HotDealTheme(
if (!view.isInEditMode) {
SideEffect {
val window = (view.context as Activity).window
// 시스템 바 색상을 앱 배경색과 일치시켜 이질감 제거
window.statusBarColor = colorScheme.surface.toArgb()
window.navigationBarColor = colorScheme.surface.toArgb()
// One UI 9 Edge-to-Edge 완벽 투명 처리
window.statusBarColor = colorScheme.background.toArgb()
window.navigationBarColor = colorScheme.background.toArgb()
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme
WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars = !darkTheme
}