v0.2.4: One UI 9 & Material 3 Expressive UI/UX Redesign
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,14 +264,14 @@ fun HotDealTheme(
|
||||
darkTheme -> DarkColorScheme
|
||||
else -> LightColorScheme
|
||||
}
|
||||
|
||||
|
||||
val view = LocalView.current
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user