Use pure compose themes, not MDC adapter

This commit is contained in:
MM20
2022-04-11 20:04:34 +02:00
parent 840c7db690
commit 19ae7e07e6
17 changed files with 280 additions and 74 deletions
@@ -0,0 +1,64 @@
package de.mm20.launcher2.ui
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.ColorScheme
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.Theme
import de.mm20.launcher2.ui.theme.colorscheme.DarkBlackAndWhiteColorScheme
import de.mm20.launcher2.ui.theme.colorscheme.DarkPre31DefaultColorScheme
import de.mm20.launcher2.ui.theme.colorscheme.LightBlackAndWhiteColorScheme
import de.mm20.launcher2.ui.theme.colorscheme.LightPre31DefaultColorScheme
import de.mm20.launcher2.ui.theme.typography.DefaultTypography
import kotlinx.coroutines.flow.map
import org.koin.androidx.compose.inject
@Composable
fun LauncherTheme(
content: @Composable () -> Unit
) {
val dataStore: LauncherDataStore by inject()
val colorSchemePreference by remember { dataStore.data.map { it.appearance.colorScheme } }.collectAsState(
ColorScheme.Default
)
val themePreference by remember { dataStore.data.map { it.appearance.theme } }.collectAsState(
Theme.System
)
val darkTheme =
themePreference == Theme.Dark || themePreference == Theme.System && isSystemInDarkTheme()
val colorScheme = when (colorSchemePreference) {
ColorScheme.BlackAndWhite -> {
if (darkTheme) DarkBlackAndWhiteColorScheme
else LightBlackAndWhiteColorScheme
}
else -> {
if (darkTheme) {
if (isAtLeastApiLevel(31)) dynamicDarkColorScheme(LocalContext.current)
else DarkPre31DefaultColorScheme
} else {
if (isAtLeastApiLevel(31)) dynamicLightColorScheme(LocalContext.current)
else LightPre31DefaultColorScheme
}
}
}
MaterialTheme(
colorScheme = colorScheme,
typography = DefaultTypography,
content = content
)
}
@@ -1,13 +0,0 @@
package de.mm20.launcher2.ui
import androidx.compose.runtime.Composable
import com.google.android.material.composethemeadapter.MdcTheme
import com.google.android.material.composethemeadapter3.Mdc3Theme
@Composable
fun MdcLauncherTheme(content: @Composable () -> Unit) {
Mdc3Theme {
MdcTheme(content = content)
}
}
@@ -1,50 +1,12 @@
package de.mm20.launcher2.ui.base package de.mm20.launcher2.ui.base
import android.os.Bundle
import android.view.Window
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import de.mm20.launcher2.permissions.PermissionsManager import de.mm20.launcher2.permissions.PermissionsManager
import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.ui.R
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
abstract class BaseActivity : AppCompatActivity() { abstract class BaseActivity : AppCompatActivity() {
private val permissionsManager: PermissionsManager by inject() private val permissionsManager: PermissionsManager by inject()
private val viewModel: BaseActivityVM by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val theme = viewModel.getTheme()
when (theme) {
Settings.AppearanceSettings.Theme.Light -> AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_NO
)
Settings.AppearanceSettings.Theme.Dark -> AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_YES
)
else -> AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
)
}
viewModel.theme.observe(this) {
if (it != theme && it != null) recreate()
}
val colorScheme = viewModel.getColorScheme()
val colorSchemeThemeId = when (colorScheme) {
Settings.AppearanceSettings.ColorScheme.BlackAndWhite -> R.style.BlackWhiteColors
else -> R.style.DefaultColors
}
this.theme.applyStyle(colorSchemeThemeId, true)
viewModel.colorScheme.observe(this) {
if (it != colorScheme && it != null) recreate()
}
}
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(
requestCode: Int, requestCode: Int,
permissions: Array<out String>, permissions: Array<out String>,
@@ -23,6 +23,7 @@ fun LauncherCard(
border = LocalCardStyle.current.borderWidth.takeIf { it > 0 } border = LocalCardStyle.current.borderWidth.takeIf { it > 0 }
?.let { BorderStroke(it.dp, MaterialTheme.colorScheme.surface) }, ?.let { BorderStroke(it.dp, MaterialTheme.colorScheme.surface) },
content = content, content = content,
contentColor = MaterialTheme.colorScheme.onSurface,
color = MaterialTheme.colorScheme.surface.copy(alpha = backgroundOpacity.coerceIn(0f, 1f)), color = MaterialTheme.colorScheme.surface.copy(alpha = backgroundOpacity.coerceIn(0f, 1f)),
shadowElevation = if (backgroundOpacity == 1f) elevation else 0.dp, shadowElevation = if (backgroundOpacity == 1f) elevation else 0.dp,
tonalElevation = elevation tonalElevation = elevation
@@ -20,10 +20,7 @@ import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
@@ -76,10 +73,21 @@ fun ShapedLauncherIcon(
val fgScale = icon.foregroundScale val fgScale = icon.foregroundScale
val bgScale = icon.backgroundScale val bgScale = icon.backgroundScale
val themedFgColor = MaterialTheme.colorScheme.onPrimaryContainer
val themedBgColor = MaterialTheme.colorScheme.primaryContainer
val fg = remember(icon, icon.isThemeable, themedFgColor) {
icon.foreground.also {
if (icon.isThemeable) it.setTint(themedFgColor.toArgb())
}
}
val bg = remember(icon, icon.isThemeable, themedBgColor) {
icon.background?.also {
if (icon.isThemeable) it.setTint(themedBgColor.toArgb())
}
}
Canvas(modifier = Modifier.fillMaxSize()) { Canvas(modifier = Modifier.fillMaxSize()) {
val fg = icon.foreground
val bg = icon.background
drawIntoCanvas { drawIntoCanvas {
val paddingFg = (size * (1 - fgScale) * 0.5f).toPx() val paddingFg = (size * (1 - fgScale) * 0.5f).toPx()
val paddingBg = (size * (1 - bgScale) * 0.5f).toPx() val paddingBg = (size * (1 - bgScale) * 0.5f).toPx()
@@ -31,7 +31,7 @@ import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import de.mm20.launcher2.ui.MdcLauncherTheme import de.mm20.launcher2.ui.LauncherTheme
import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.base.ProvideSettings import de.mm20.launcher2.ui.base.ProvideSettings
import de.mm20.launcher2.ui.ktx.toPixels import de.mm20.launcher2.ui.ktx.toPixels
@@ -48,7 +48,7 @@ class HiddenItemsView @JvmOverloads constructor(
val composeView = ComposeView(context) val composeView = ComposeView(context)
composeView.setContent { composeView.setContent {
MdcLauncherTheme { LauncherTheme {
ProvideSettings { ProvideSettings {
Dialog( Dialog(
properties = DialogProperties(usePlatformDefaultWidth = false), properties = DialogProperties(usePlatformDefaultWidth = false),
@@ -216,9 +216,9 @@ fun SearchBar(
} }
}) { }) {
when { when {
style != SearchBarSettings.SearchBarStyle.Transparent -> LocalContentColor.current style != SearchBarSettings.SearchBarStyle.Transparent -> MaterialTheme.colorScheme.onSurface
it == SearchBarLevel.Resting -> Color.White it == SearchBarLevel.Resting -> Color.White
else -> LocalContentColor.current else -> MaterialTheme.colorScheme.onSurface
} }
} }
@@ -14,8 +14,7 @@ import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import de.mm20.launcher2.preferences.LauncherDataStore import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.ui.MdcLauncherTheme import de.mm20.launcher2.ui.LauncherTheme
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.locals.LocalCardStyle import de.mm20.launcher2.ui.locals.LocalCardStyle
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
@@ -49,7 +48,7 @@ class SearchBarView @JvmOverloads constructor(
CompositionLocalProvider( CompositionLocalProvider(
LocalCardStyle provides cardStyle LocalCardStyle provides cardStyle
) { ) {
MdcLauncherTheme { LauncherTheme {
Box(contentAlignment = Alignment.TopCenter) { Box(contentAlignment = Alignment.TopCenter) {
SearchBar( SearchBar(
level level
@@ -10,7 +10,7 @@ import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import de.mm20.launcher2.ui.MdcLauncherTheme import de.mm20.launcher2.ui.LauncherTheme
import de.mm20.launcher2.ui.base.ProvideSettings import de.mm20.launcher2.ui.base.ProvideSettings
import de.mm20.launcher2.ui.launcher.search.apps.AppResults import de.mm20.launcher2.ui.launcher.search.apps.AppResults
import de.mm20.launcher2.ui.launcher.search.appshortcuts.AppShortcutResults import de.mm20.launcher2.ui.launcher.search.appshortcuts.AppShortcutResults
@@ -35,7 +35,7 @@ class SearchView @JvmOverloads constructor(
LayoutParams.WRAP_CONTENT LayoutParams.WRAP_CONTENT
) )
view.setContent { view.setContent {
MdcLauncherTheme { LauncherTheme {
ProvideSettings { ProvideSettings {
Column( Column(
modifier = Modifier modifier = Modifier
@@ -6,14 +6,12 @@ import android.appwidget.AppWidgetManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.util.AttributeSet import android.util.AttributeSet
import android.util.Log
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.animateContentSize
import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.Animatable
import androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi import androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi
import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.animatedVectorResource
@@ -44,7 +42,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import de.mm20.launcher2.ui.ClockWidget import de.mm20.launcher2.ui.ClockWidget
import de.mm20.launcher2.ui.MdcLauncherTheme import de.mm20.launcher2.ui.LauncherTheme
import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.base.ProvideSettings import de.mm20.launcher2.ui.base.ProvideSettings
import de.mm20.launcher2.ui.ktx.toDp import de.mm20.launcher2.ui.ktx.toDp
@@ -97,7 +95,7 @@ class WidgetsView @JvmOverloads constructor(
val composeView = ComposeView(context) val composeView = ComposeView(context)
composeView.setContent { composeView.setContent {
MdcLauncherTheme { LauncherTheme {
ProvideSettings { ProvideSettings {
Column( Column(
modifier = Modifier modifier = Modifier
@@ -18,7 +18,7 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import de.mm20.launcher2.ui.MdcLauncherTheme import de.mm20.launcher2.ui.LauncherTheme
import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.base.BaseActivity import de.mm20.launcher2.ui.base.BaseActivity
import de.mm20.launcher2.ui.base.ProvideSettings import de.mm20.launcher2.ui.base.ProvideSettings
@@ -40,7 +40,7 @@ class PickAppWidgetActivity : BaseActivity() {
val availableWidgets = viewModel.getAvailableWidgets(this) val availableWidgets = viewModel.getAvailableWidgets(this)
val selectedAppWidget = viewModel.selectedAppWidget val selectedAppWidget = viewModel.selectedAppWidget
setContent { setContent {
MdcLauncherTheme { LauncherTheme {
ProvideSettings { ProvideSettings {
Scaffold( Scaffold(
topBar = { topBar = {
@@ -15,7 +15,7 @@ import de.mm20.launcher2.licenses.AppLicense
import de.mm20.launcher2.licenses.OpenSourceLicenses import de.mm20.launcher2.licenses.OpenSourceLicenses
import de.mm20.launcher2.preferences.LauncherDataStore import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.ui.MdcLauncherTheme import de.mm20.launcher2.ui.LauncherTheme
import de.mm20.launcher2.ui.base.BaseActivity import de.mm20.launcher2.ui.base.BaseActivity
import de.mm20.launcher2.ui.locals.LocalCardStyle import de.mm20.launcher2.ui.locals.LocalCardStyle
import de.mm20.launcher2.ui.locals.LocalNavController import de.mm20.launcher2.ui.locals.LocalNavController
@@ -69,7 +69,7 @@ class SettingsActivity : BaseActivity() {
LocalNavController provides navController, LocalNavController provides navController,
LocalCardStyle provides cardStyle LocalCardStyle provides cardStyle
) { ) {
MdcLauncherTheme { LauncherTheme {
AnimatedNavHost( AnimatedNavHost(
navController = navController, navController = navController,
startDestination = "settings", startDestination = "settings",
@@ -0,0 +1,63 @@
package de.mm20.launcher2.ui.theme.colorscheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.ui.graphics.Color
val LightBlackAndWhiteColorScheme = lightColorScheme(
primary = Color.Black,
onPrimary = Color.White,
primaryContainer = Color.White,
onPrimaryContainer = Color.Black,
inversePrimary = Color.White,
secondary = Color.Black,
onSecondary = Color.White,
secondaryContainer = Color.White,
onSecondaryContainer = Color.Black,
tertiary = Color.Black,
onTertiary = Color.White,
tertiaryContainer = Color.White,
onTertiaryContainer = Color.Black,
background = Color.White,
onBackground = Color.Black,
surface = Color.White,
onSurface = Color.Black,
surfaceVariant = Color.White,
onSurfaceVariant = Color.Black,
inverseSurface = Color.Black,
inverseOnSurface = Color.White,
error = Color(0xFFC10000),
onError = Color(0xFFFFFFFF),
errorContainer = Color(0xFFFFDAD3),
onErrorContainer = Color(0xFF410000),
outline = Color.White
)
val DarkBlackAndWhiteColorScheme = darkColorScheme(
primary = Color.White,
onPrimary = Color.Black,
primaryContainer = Color.Black,
onPrimaryContainer = Color.White,
inversePrimary = Color.Black,
secondary = Color.White,
onSecondary = Color.Black,
secondaryContainer = Color.Black,
onSecondaryContainer = Color.White,
tertiary = Color.White,
onTertiary = Color.Black,
tertiaryContainer = Color.Black,
onTertiaryContainer = Color.White,
background = Color.Black,
onBackground = Color.White,
surface = Color.Black,
onSurface = Color.White,
surfaceVariant = Color.Black,
onSurfaceVariant = Color.White,
inverseSurface = Color.White,
inverseOnSurface = Color.Black,
error = Color(0xffffb4a6),
onError = Color(0xff690000),
errorContainer = Color(0xff940000),
onErrorContainer = Color(0xffffb4a6),
outline = Color.White,
)
@@ -0,0 +1,63 @@
package de.mm20.launcher2.ui.theme.colorscheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.ui.graphics.Color
val LightPre31DefaultColorScheme = lightColorScheme(
primary = Color(0xFF3C6089),
onPrimary = Color(0xFFFFFFFF),
primaryContainer = Color(0xFFD1E4FF),
onPrimaryContainer = Color(0xFF101C2B),
inversePrimary = Color(0xFFA6C9F8),
secondary = Color(0xFF41617E),
onSecondary = Color(0xFFFFFFFF),
secondaryContainer = Color(0xFFCCE5FF),
onSecondaryContainer = Color(0xFF001D33),
tertiary = Color(0xFF2C6674),
onTertiary = Color(0xFFFFFFFF),
tertiaryContainer = Color(0xFFB2EBFC),
onTertiaryContainer = Color(0xFF001F26),
background = Color(0xFFFDFCFF),
onBackground = Color(0xFF161C27),
surface = Color(0xFFFDFCFF),
onSurface = Color(0xFF161C27),
surfaceVariant = Color(0xFFD8E2FA),
onSurfaceVariant = Color(0xFF3D475A),
inverseSurface = Color(0xFF2B313C),
inverseOnSurface = Color(0xFFEBF0FF),
error = Color(0xFF98434C),
onError = Color(0xFFFFFFFF),
errorContainer = Color(0xFFFFDADD),
onErrorContainer = Color(0xFF40000E),
outline = Color(0xFF6D778C),
)
val DarkPre31DefaultColorScheme = darkColorScheme(
primary = Color(0xFFA6C9F8),
onPrimary = Color(0xFF033259),
primaryContainer = Color(0xFF234870),
onPrimaryContainer = Color(0xFFD1E4FF),
inversePrimary = Color(0xFF3C6089),
secondary = Color(0xFFA9CAEC),
onSecondary = Color(0xFF0E334E),
secondaryContainer = Color(0xFF284965),
onSecondaryContainer = Color(0xFFCCE5FF),
tertiary = Color(0xFF97CFDF),
onTertiary = Color(0xFF003641),
tertiaryContainer = Color(0xFF094E5C),
onTertiaryContainer = Color(0xFFB2EBFC),
background = Color(0xFF161C27),
onBackground = Color(0xFFDDE2F2),
surface = Color(0xFF161C27),
onSurface = Color(0xFFDDE2F2),
surfaceVariant = Color(0xFF3D475A),
onSurfaceVariant = Color(0xFFBDC7DF),
inverseSurface = Color(0xFFDDE2F2),
inverseOnSurface = Color(0xFF2B313C),
error = Color(0xFFFFB3B9),
onError = Color(0xFF5D1521),
errorContainer = Color(0xFF7A2C36),
onErrorContainer = Color(0xFFFFB3B9),
outline = Color(0xFF8791A7),
)
@@ -0,0 +1,28 @@
package de.mm20.launcher2.ui.theme.typography
import androidx.compose.material3.Typography
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
fun makeTypography(
headlineFamily: FontFamily? = null,
bodyFamily: FontFamily? = null): Typography {
val baseTypography = Typography()
return Typography(
displayLarge = baseTypography.displayLarge.copy(fontFamily = headlineFamily, fontWeight = FontWeight.Medium),
displayMedium = baseTypography.displayMedium.copy(fontFamily = headlineFamily, fontWeight = FontWeight.Medium),
displaySmall = baseTypography.displaySmall.copy(fontFamily = headlineFamily, fontWeight = FontWeight.Medium),
headlineLarge = baseTypography.headlineLarge.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold),
headlineMedium = baseTypography.headlineMedium.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold),
headlineSmall = baseTypography.headlineSmall.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold),
titleLarge = baseTypography.titleLarge.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold),
titleMedium = baseTypography.titleMedium.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold),
titleSmall = baseTypography.titleSmall.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold),
bodyLarge = baseTypography.bodyLarge.copy(fontFamily = bodyFamily),
bodyMedium = baseTypography.bodyMedium.copy(fontFamily = bodyFamily),
bodySmall = baseTypography.bodySmall.copy(fontFamily = bodyFamily),
labelLarge = baseTypography.labelLarge.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold),
labelMedium = baseTypography.labelMedium.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold),
labelSmall = baseTypography.labelSmall.copy(fontFamily = headlineFamily, fontWeight = FontWeight.SemiBold)
)
}
@@ -0,0 +1,5 @@
package de.mm20.launcher2.ui.theme.typography
import de.mm20.launcher2.ui.theme.typography.fontfamily.Poppins
val DefaultTypography = makeTypography(headlineFamily = Poppins)
@@ -0,0 +1,28 @@
package de.mm20.launcher2.ui.theme.typography.fontfamily
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import de.mm20.launcher2.ui.R
val Poppins = FontFamily(
Font(R.font.poppins100, weight = FontWeight.Thin, style = FontStyle.Normal),
Font(R.font.poppins200, weight = FontWeight.ExtraLight, style = FontStyle.Normal),
Font(R.font.poppins300, weight = FontWeight.Light, style = FontStyle.Normal),
Font(R.font.poppins400, weight = FontWeight.Normal, style = FontStyle.Normal),
Font(R.font.poppins500, weight = FontWeight.Medium, style = FontStyle.Normal),
Font(R.font.poppins600, weight = FontWeight.SemiBold, style = FontStyle.Normal),
Font(R.font.poppins700, weight = FontWeight.Bold, style = FontStyle.Normal),
Font(R.font.poppins800, weight = FontWeight.ExtraBold, style = FontStyle.Normal),
Font(R.font.poppins900, weight = FontWeight.Black, style = FontStyle.Normal),
Font(R.font.poppins100i, weight = FontWeight.Thin, style = FontStyle.Italic),
Font(R.font.poppins200i, weight = FontWeight.ExtraLight, style = FontStyle.Italic),
Font(R.font.poppins300i, weight = FontWeight.Light, style = FontStyle.Italic),
Font(R.font.poppins400i, weight = FontWeight.Normal, style = FontStyle.Italic),
Font(R.font.poppins500i, weight = FontWeight.Medium, style = FontStyle.Italic),
Font(R.font.poppins600i, weight = FontWeight.SemiBold, style = FontStyle.Italic),
Font(R.font.poppins700i, weight = FontWeight.Bold, style = FontStyle.Italic),
Font(R.font.poppins800i, weight = FontWeight.ExtraBold, style = FontStyle.Italic),
Font(R.font.poppins900i, weight = FontWeight.Black, style = FontStyle.Italic),
)