Skip to content

Instantly share code, notes, and snippets.

View pauloaapereira's full-sized avatar

Paulo Pereira pauloaapereira

View GitHub Profile
@pauloaapereira
pauloaapereira / autocomplete_8.kt
Created March 31, 2021 01:43
Jetpack Compose - Auto Complete Search Bar_8
typealias CustomFilter<T> = (T, String) -> Boolean
fun <T> List<T>.asAutoCompleteEntities(filter: CustomFilter<T>): List<ValueAutoCompleteEntity<T>> {
return map {
object : ValueAutoCompleteEntity<T> {
override val value: T = it
override fun filter(query: String): Boolean {
return filter(value, query)
@pauloaapereira
pauloaapereira / autocomplete_7.kt
Created March 31, 2021 01:38
Jetpack Compose - Auto Complete Search Bar_7
@Stable
interface ValueAutoCompleteEntity<T> : AutoCompleteEntity {
val value: T
}
@pauloaapereira
pauloaapereira / autocomplete_6.kt
Created March 31, 2021 01:05
Jetpack Compose - Auto Complete Search Bar_6
private fun Modifier.autoComplete(
autoCompleteItemScope: AutoCompleteDesignScope
): Modifier = composed {
val baseModifier = if (autoCompleteItemScope.shouldWrapContentHeight)
wrapContentHeight()
else
heightIn(0.dp, autoCompleteItemScope.boxMaxHeight)
baseModifier
.testTag(AutoCompleteBoxTag)
@pauloaapereira
pauloaapereira / autocomplete_5.kt
Last active March 31, 2021 01:05
Jetpack Compose - Auto Complete Search Bar_5
@ExperimentalAnimationApi
@Composable
fun <T : AutoCompleteEntity> AutoCompleteBox(
items: List<T>,
itemContent: @Composable (T) -> Unit,
content: @Composable AutoCompleteScope<T>.() -> Unit
) {
val autoCompleteState = remember { AutoCompleteState(startItems = items) }
@pauloaapereira
pauloaapereira / autocomplete_4.kt
Created March 31, 2021 00:51
Jetpack Compose - Auto Complete Search Bar_4
@Composable
fun <T : AutoCompleteEntity> AutoCompleteBox(
items: List<T>,
itemContent: @Composable (T) -> Unit,
content: @Composable AutoCompleteScope<T>.() -> Unit
) {
...
}
@pauloaapereira
pauloaapereira / autocomplete_3.kt
Last active May 20, 2022 21:00
Jetpack Compose - Auto Complete Search Bar_3
class AutoCompleteState<T : AutoCompleteEntity>(private val startItems: List<T>) : AutoCompleteScope<T> {
private var onItemSelectedBlock: ItemSelected<T>? = null
fun selectItem(item: T) {
onItemSelectedBlock?.invoke(item)
}
var filteredItems by mutableStateOf(startItems)
override var isSearching by mutableStateOf(false)
override var boxWidthPercentage by mutableStateOf(.9f)
@pauloaapereira
pauloaapereira / autocomplete_2.kt
Created March 31, 2021 00:29
Jetpack Compose - Auto Complete Search Bar_2
private typealias ItemSelected<T> = (T) -> Unit
@Stable
interface AutoCompleteScope<T : AutoCompleteEntity> : AutoCompleteDesignScope {
var isSearching: Boolean
fun filter(query: String)
fun onItemSelected(block: ItemSelected<T> = {})
}
@pauloaapereira
pauloaapereira / autocomplete_1.kt
Created March 31, 2021 00:04
Jetpack Compose - Auto Complete Search Bar_1
@Stable
interface AutoCompleteEntity {
fun filter(query: String): Boolean
}
@Stable
interface ValueAutoCompleteEntity<T> : AutoCompleteEntity {
val value: T
}
@pauloaapereira
pauloaapereira / weatherfy_9.kt
Created March 18, 2021 19:50
AndroidDevChallenge_Week4_JetWeatherfy_9
Curtain(
foldingDuration = 400,
mainCell = {
Card(
modifier = Modifier.fillMaxWidth(),
backgroundColor = Color.DarkGray,
) {
Box(
modifier = Modifier.fillMaxWidth().padding(16.dp)
) {
@pauloaapereira
pauloaapereira / weatherfy_8.kt
Created March 18, 2021 19:39
AndroidDevChallenge_Week4_JetWeatherfy_8
@Composable
private fun FoldedCell(
isOpened: Boolean,
cellsQuantity: Int,
foldingDuration: Int,
index: Int,
content: @Composable () -> Unit
) {
var cellMaxHeight by remember { mutableStateOf(0.dp) }
val transition = updateTransition(targetState = isOpened)