Skip to content

Commit

Permalink
Merge pull request #46 from kiwicom/material-wrapper
Browse files Browse the repository at this point in the history
Theming: add MaterialTheme support
  • Loading branch information
hrach committed Nov 5, 2021
2 parents 0124fdb + 037597a commit 2b27ecd
Show file tree
Hide file tree
Showing 9 changed files with 154 additions and 2 deletions.
1 change: 1 addition & 0 deletions catalog/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ dependencies {
implementation(libs.compose.animation)
implementation(libs.compose.foundation)
implementation(libs.compose.layout)
implementation(libs.compose.material)
implementation(libs.compose.materialIconsExtended)
implementation(libs.compose.navigation)
implementation(libs.compose.runtime)
Expand Down
22 changes: 22 additions & 0 deletions catalog/src/main/java/kiwi/orbit/compose/catalog/NavGraph.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ import androidx.compose.runtime.remember
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.dialog
import androidx.navigation.compose.rememberNavController
import kiwi.orbit.compose.catalog.screens.AlertScreen
import kiwi.orbit.compose.catalog.screens.BadgeScreen
import kiwi.orbit.compose.catalog.screens.ButtonScreen
import kiwi.orbit.compose.catalog.screens.CardsScreen
import kiwi.orbit.compose.catalog.screens.CheckboxScreen
import kiwi.orbit.compose.catalog.screens.ColorsScreen
import kiwi.orbit.compose.catalog.screens.DialogsMaterialDialog
import kiwi.orbit.compose.catalog.screens.DialogsScreen
import kiwi.orbit.compose.catalog.screens.IconsScreen
import kiwi.orbit.compose.catalog.screens.IllustrationsScreen
import kiwi.orbit.compose.catalog.screens.MainScreen
Expand All @@ -36,6 +39,8 @@ private object MainDestinations {
const val BUTTON = "button"
const val CARDS = "cards"
const val CHECKBOX = "checkbox"
const val DIALOGS = "dialogs"
const val DIALOGS_MATERIAL_DIALOG = "dialgos_material_dialog"
const val RADIO = "radio"
const val STEPPER = "stepper"
const val SWITCH = "switch"
Expand Down Expand Up @@ -89,6 +94,15 @@ fun NavGraph(
composable(MainDestinations.CHECKBOX) {
CheckboxScreen(actions::navigateUp)
}
composable(MainDestinations.DIALOGS) {
DialogsScreen(
actions::navigateUp,
actions::showDialogsMaterialDialog,
)
}
dialog(MainDestinations.DIALOGS_MATERIAL_DIALOG) {
DialogsMaterialDialog(navController)
}
composable(MainDestinations.RADIO) {
RadioScreen(actions::navigateUp)
}
Expand Down Expand Up @@ -154,6 +168,14 @@ class MainActions(
navController.navigate(MainDestinations.CHECKBOX)
}

fun showDialogs() {
navController.navigate(MainDestinations.DIALOGS)
}

fun showDialogsMaterialDialog() {
navController.navigate(MainDestinations.DIALOGS_MATERIAL_DIALOG)
}

fun showRadio() {
navController.navigate(MainDestinations.RADIO)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package kiwi.orbit.compose.catalog.screens

import androidx.compose.material.AlertDialog
import androidx.compose.runtime.Composable
import androidx.navigation.NavController
import kiwi.orbit.compose.ui.controls.Text

@Composable
fun DialogsMaterialDialog(navController: NavController) {
DialogsMaterialDialog(
onClose = { navController.popBackStack() },
)
}

@Suppress("Dependency")
@Composable
private fun DialogsMaterialDialog(
onClose: () -> Unit,
) {
AlertDialog(
onDismissRequest = onClose,
title = { androidx.compose.material.Text("Title") },
text = { androidx.compose.material.Text("Some message.") },
confirmButton = {
androidx.compose.material.TextButton(onClick = onClose) {
Text("Ok")
}
}
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package kiwi.orbit.compose.catalog.screens

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import kiwi.orbit.compose.catalog.Screen
import kiwi.orbit.compose.ui.controls.ButtonPrimary
import kiwi.orbit.compose.ui.controls.Text

@Composable
fun DialogsScreen(
onUpClick: () -> Unit,
onShowMaterialDialog: () -> Unit,
) {
Screen(
title = "Dialogs",
onUpClick = onUpClick,
withBackground = false,
) {
Box(
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(it)
) {
DialogsScreenInner(onShowMaterialDialog)
}
}
}

@Composable
private fun DialogsScreenInner(
onShowMaterialDialog: () -> Unit,
) {
Column(Modifier.padding(16.dp)) {
ButtonPrimary(
onClick = onShowMaterialDialog,
) { Text("Show Material Dialog") }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ fun MainScreen(
Triple("Button", { Icon(MaterialIcons.SmartButton, null) }, actions::showButton),
Triple("Cards / Tiles", { Icon(MaterialIcons.Article, null) }, actions::showCards),
Triple("Checkbox", { Icon(MaterialIcons.CheckBox, null) }, actions::showCheckbox),
Triple("Dialogs", { Icon(Icons.Chat, null) }, actions::showDialogs),
Triple("Radio", { Icon(Icons.CircleFilled, null) }, actions::showRadio),
Triple("Stepper", { Icon(Icons.PlusCircle, null) }, actions::showStepper),
Triple("Switch", { Icon(MaterialIcons.ToggleOn, null) }, actions::showSwitch),
Expand Down
10 changes: 9 additions & 1 deletion ui/src/main/java/kiwi/orbit/compose/ui/OrbitTheme.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package kiwi.orbit.compose.ui

import androidx.compose.foundation.LocalIndication
import androidx.compose.material.MaterialTheme
import androidx.compose.material.ripple.LocalRippleTheme
import androidx.compose.material.ripple.RippleTheme
import androidx.compose.material.ripple.rememberRipple
Expand All @@ -21,6 +22,7 @@ import kiwi.orbit.compose.ui.foundation.Shapes
import kiwi.orbit.compose.ui.foundation.Typography
import kiwi.orbit.compose.ui.foundation.updateColorsFrom

@Suppress("Dependency")
@Composable
public fun OrbitTheme(
colors: Colors = OrbitTheme.colors,
Expand All @@ -42,7 +44,13 @@ public fun OrbitTheme(
LocalIndication provides rippleIndication,
LocalTypography provides typography,
) {
ProvideMergedTextStyle(typography.bodyNormal, content = content)
MaterialTheme(
colors = rememberedColors.toMaterialColors(),
typography = typography.toMaterialTypography(),
shapes = shapes.toMaterialShapes(),
) {
ProvideMergedTextStyle(typography.bodyNormal, content = content)
}
}
}

Expand Down
18 changes: 18 additions & 0 deletions ui/src/main/java/kiwi/orbit/compose/ui/foundation/Colors.kt
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,24 @@ public class Colors(
critical = critical,
isLight = isLight,
)

@Suppress("Dependency")
internal fun toMaterialColors(): androidx.compose.material.Colors =
androidx.compose.material.Colors(
primary = primary.main,
primaryVariant = primary.strong,
secondary = interactive.main,
secondaryVariant = interactive.strong,
background = surface.background,
surface = surface.main,
error = critical.main,
onPrimary = primary.onMain,
onSecondary = interactive.onMain,
onBackground = content.normal,
onSurface = content.normal,
onError = critical.onMain,
isLight = isLight,
)
}

@Composable
Expand Down
10 changes: 9 additions & 1 deletion ui/src/main/java/kiwi/orbit/compose/ui/foundation/Shapes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,14 @@ public data class Shapes(
val small: CornerBasedShape = RoundedCornerShape(4.dp),
val normal: CornerBasedShape = RoundedCornerShape(6.dp),
val large: CornerBasedShape = RoundedCornerShape(12.dp),
)
) {
@Suppress("Dependency")
internal fun toMaterialShapes(): androidx.compose.material.Shapes =
androidx.compose.material.Shapes(
small = small,
medium = normal,
large = large,
)
}

internal val LocalShapes: ProvidableCompositionLocal<Shapes> = staticCompositionLocalOf { Shapes() }
18 changes: 18 additions & 0 deletions ui/src/main/java/kiwi/orbit/compose/ui/foundation/Typography.kt
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,24 @@ public data class Typography internal constructor(
bodyNormal = bodyNormal.withDefaultFontFamily(defaultFontFamily),
bodySmall = bodySmall.withDefaultFontFamily(defaultFontFamily),
)

@Suppress("Dependency")
internal fun toMaterialTypography(): androidx.compose.material.Typography =
androidx.compose.material.Typography(
defaultFontFamily = displayTitle.fontFamily ?: FontFamily.Default,
h1 = displayTitle.copy(fontSize = 96.sp),
h2 = displayTitle.copy(fontSize = 60.sp),
h3 = displayTitle,
h4 = title2,
h5 = title2,
h6 = title3,
subtitle1 = title3,
subtitle2 = title4,
overline = title5,
body1 = bodyLarge,
body2 = bodyNormal,
button = title4,
)
}

private fun TextStyle.withDefaultFontFamily(default: FontFamily): TextStyle {
Expand Down

0 comments on commit 2b27ecd

Please sign in to comment.