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