Initial commit: rosetta-android-prime
This commit is contained in:
41
app/src/main/java/com/rosetta/messenger/ui/theme/Color.kt
Normal file
41
app/src/main/java/com/rosetta/messenger/ui/theme/Color.kt
Normal file
@@ -0,0 +1,41 @@
|
||||
package com.rosetta.messenger.ui.theme
|
||||
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
||||
// Light theme colors
|
||||
val LightBackground = Color(0xFFFFFFFF)
|
||||
val LightBackgroundSecondary = Color(0xFFF2F3F5)
|
||||
val LightSurface = Color(0xFFF5F5F5)
|
||||
val LightText = Color(0xFF000000)
|
||||
val LightTextSecondary = Color(0xFF666666)
|
||||
val LightTextTertiary = Color(0xFF999999)
|
||||
val LightBlue = Color(0xFF74C0FC)
|
||||
val LightBorder = Color(0xFFE0E0E0)
|
||||
val LightDivider = Color(0xFFEEEEEE)
|
||||
val LightMessageBackground = Color(0xFFF5F5F5)
|
||||
val LightMessageBackgroundOwn = Color(0xFFDCF8C6)
|
||||
val LightPrimary = Color(0xFF248AE6)
|
||||
val LightPrimaryLight = Color(0xFF73C0FC)
|
||||
val LightInputBackground = Color(0xFFF2F3F5)
|
||||
|
||||
// Dark theme colors
|
||||
val DarkBackground = Color(0xFF1E1E1E)
|
||||
val DarkBackgroundSecondary = Color(0xFF2A2A2A)
|
||||
val DarkSurface = Color(0xFF242424)
|
||||
val DarkText = Color(0xFFFFFFFF)
|
||||
val DarkTextSecondary = Color(0xFF8E8E93)
|
||||
val DarkTextTertiary = Color(0xFF666666)
|
||||
val DarkBorder = Color(0xFF2E2E2E)
|
||||
val DarkDivider = Color(0xFF333333)
|
||||
val DarkMessageBackground = Color(0xFF2A2A2A)
|
||||
val DarkMessageBackgroundOwn = Color(0xFF263341)
|
||||
val DarkPrimary = Color(0xFF238BE6)
|
||||
val DarkPrimaryLight = Color(0xFF5BA8F0)
|
||||
val DarkInputBackground = Color(0xFF2A2A2A)
|
||||
|
||||
// Shared colors
|
||||
val Accent = Color(0xFFE91E63)
|
||||
val Error = Color(0xFFFF3B30)
|
||||
val Success = Color(0xFF34C759)
|
||||
val Warning = Color(0xFFFF9500)
|
||||
val OnlineIndicator = Color(0xFF34C759)
|
||||
82
app/src/main/java/com/rosetta/messenger/ui/theme/Theme.kt
Normal file
82
app/src/main/java/com/rosetta/messenger/ui/theme/Theme.kt
Normal file
@@ -0,0 +1,82 @@
|
||||
package com.rosetta.messenger.ui.theme
|
||||
|
||||
import android.graphics.Color as AndroidColor
|
||||
import android.os.Build
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.darkColorScheme
|
||||
import androidx.compose.material3.dynamicDarkColorScheme
|
||||
import androidx.compose.material3.dynamicLightColorScheme
|
||||
import androidx.compose.material3.lightColorScheme
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.core.view.WindowCompat
|
||||
import kotlinx.coroutines.delay
|
||||
|
||||
private val DarkColorScheme = darkColorScheme(
|
||||
primary = DarkPrimary,
|
||||
secondary = Accent,
|
||||
tertiary = DarkPrimaryLight,
|
||||
background = DarkBackground,
|
||||
surface = DarkSurface,
|
||||
error = Error,
|
||||
onPrimary = DarkText,
|
||||
onSecondary = DarkText,
|
||||
onTertiary = DarkText,
|
||||
onBackground = DarkText,
|
||||
onSurface = DarkText,
|
||||
onError = DarkText,
|
||||
)
|
||||
|
||||
private val LightColorScheme = lightColorScheme(
|
||||
primary = LightPrimary,
|
||||
secondary = Accent,
|
||||
tertiary = LightPrimaryLight,
|
||||
background = LightBackground,
|
||||
surface = LightSurface,
|
||||
error = Error,
|
||||
onPrimary = LightText,
|
||||
onSecondary = LightText,
|
||||
onTertiary = LightText,
|
||||
onBackground = LightText,
|
||||
onSurface = LightText,
|
||||
onError = LightText,
|
||||
)
|
||||
|
||||
@Composable
|
||||
fun RosettaAndroidTheme(
|
||||
darkTheme: Boolean = isSystemInDarkTheme(),
|
||||
// Dynamic color is available on Android 12+
|
||||
dynamicColor: Boolean = false,
|
||||
@Suppress("UNUSED_PARAMETER") animated: Boolean = false,
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
val colorScheme = when {
|
||||
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
|
||||
val context = LocalContext.current
|
||||
if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
|
||||
}
|
||||
|
||||
darkTheme -> DarkColorScheme
|
||||
else -> LightColorScheme
|
||||
}
|
||||
val view = LocalView.current
|
||||
if (!view.isInEditMode) {
|
||||
SideEffect {
|
||||
val window = (view.context as android.app.Activity).window
|
||||
// Make status bar transparent for wave animation overlay
|
||||
window.statusBarColor = AndroidColor.TRANSPARENT
|
||||
window.navigationBarColor = if (darkTheme) 0xFF1B1B1B.toInt() else 0xFFFFFFFF.toInt()
|
||||
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme
|
||||
WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars = !darkTheme
|
||||
}
|
||||
}
|
||||
|
||||
MaterialTheme(
|
||||
colorScheme = colorScheme,
|
||||
typography = Typography,
|
||||
content = content
|
||||
)
|
||||
}
|
||||
38
app/src/main/java/com/rosetta/messenger/ui/theme/Type.kt
Normal file
38
app/src/main/java/com/rosetta/messenger/ui/theme/Type.kt
Normal file
@@ -0,0 +1,38 @@
|
||||
package com.rosetta.messenger.ui.theme
|
||||
|
||||
import androidx.compose.material3.Typography
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.sp
|
||||
|
||||
val Typography = Typography(
|
||||
bodyLarge = TextStyle(
|
||||
fontFamily = FontFamily.Default,
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 16.sp,
|
||||
lineHeight = 24.sp,
|
||||
letterSpacing = 0.5.sp
|
||||
),
|
||||
titleLarge = TextStyle(
|
||||
fontFamily = FontFamily.Default,
|
||||
fontWeight = FontWeight.Bold,
|
||||
fontSize = 28.sp,
|
||||
lineHeight = 34.sp,
|
||||
letterSpacing = 0.sp
|
||||
),
|
||||
bodyMedium = TextStyle(
|
||||
fontFamily = FontFamily.Default,
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 14.sp,
|
||||
lineHeight = 20.sp,
|
||||
letterSpacing = 0.25.sp
|
||||
),
|
||||
labelLarge = TextStyle(
|
||||
fontFamily = FontFamily.Default,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
fontSize = 16.sp,
|
||||
lineHeight = 24.sp,
|
||||
letterSpacing = 0.sp
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user