Skip to content

Instantly share code, notes, and snippets.

View fvilarino's full-sized avatar

Francesc Vilariño Güell fvilarino

View GitHub Profile
@fvilarino
fvilarino / compose_reisize_children_after_measure.kt
Last active April 21, 2021 17:28
Resize children after measure pass
private enum class EvenSplitElements {
Left,
Right
}
@Composable
fun EvenSplitDuo(
modifier: Modifier = Modifier,
leftContent: @Composable () -> Unit,
rightContent: @Composable () -> Unit,
@fvilarino
fvilarino / equal_size_tiles.kt
Last active April 21, 2021 21:13
Equal size tiles
@Composable
fun EqualSizeTiles(
modifier: Modifier = Modifier,
content: @Composable () -> Unit,
) {
Layout(
content = content,
modifier = modifier,
) { measurables, constraints ->
layoutTiles(
@fvilarino
fvilarino / app_theme_enum.kt
Created April 23, 2021 16:43
App Theme Enum
enum class AppTheme {
MODE_DAY,
MODE_NIGHT,
MODE_AUTO;
companion object {
fun fromOrdinal(ordinal: Int) = values()[ordinal]
}
}
@fvilarino
fvilarino / app_theme_settings.kt
Created April 23, 2021 16:48
App Theme Settings
interface UserSettings {
val themeStream: StateFlow<AppTheme>
var theme: AppTheme
}
class UserSettingsImpl @Inject constructor(
@ApplicationContext context: Context
) : UserSettings {
override val themeStream: MutableStateFlow<AppTheme>
@fvilarino
fvilarino / radio_group_item.kt
Created April 23, 2021 16:58
Radio Group Item
data class RadioButtonItem(
val id: Int,
val title: String,
)
@Composable
private fun RadioGroupItem(
item: RadioButtonItem,
selected: Boolean,
onClick: ((Int) -> Unit)?,
@fvilarino
fvilarino / radio_group_composable.kt
Created April 23, 2021 17:03
Compose Radio Group
@Composable
fun RadioGroup(
items: Iterable<RadioButtonItem>,
selected: Int,
onItemSelect: ((Int) -> Unit)?,
modifier: Modifier = Modifier,
) {
Column(
modifier = modifier.selectableGroup()
) {
@fvilarino
fvilarino / app_theme_switcher_activity.kt
Created April 23, 2021 17:15
App Theme Switcher Activity
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var userSettings: UserSettings
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val theme = userSettings.themeStream.collectAsState()
@fvilarino
fvilarino / info_label_basic.kt
Last active April 26, 2021 16:24
Info Label Basic
@Composable
fun InfoLabels(
modifier: Modifier = Modifier,
content: @Composable () -> Unit,
) {
// 1
Layout(
content = content,
modifier = modifier,
) { measurables, constraints ->
@fvilarino
fvilarino / info_labels_alignment.kt
Created April 26, 2021 16:31
Info labels alignment options
enum class InfoAlignment {
Top,
Center,
Bottom,
}
@fvilarino
fvilarino / info_labels_scope.kt
Last active April 26, 2021 16:39
Info labels scope
// 1
interface InfoLabelsScope {
@Stable
// 2
fun Modifier.align(alignment: InfoAlignment) = this.then(
// 3
InfoLabelsData(
alignment = alignment,
)
)