Skip to content

Instantly share code, notes, and snippets.

View damianpetla's full-sized avatar
🐢
Mastering Compose

Damian Petla damianpetla

🐢
Mastering Compose
View GitHub Profile
@damianpetla
damianpetla / CurrencyOffsetMapping.kt
Created October 14, 2023 09:28
Transforming EditText value into currency
import androidx.compose.ui.text.input.OffsetMapping
class CurrencyOffsetMapping(originalText: String, formattedText: String) : OffsetMapping {
private val originalLength: Int = originalText.length
private val indexes = findDigitIndexes(originalText, formattedText)
private fun findDigitIndexes(firstString: String, secondString: String): List<Int> {
val digitIndexes = mutableListOf<Int>()
var currentIndex = 0
for (digit in firstString) {
@damianpetla
damianpetla / snackbar.kt
Created July 16, 2022 17:01
MD3 Snackbar sample
val snackBarState = remember { SnackbarHostState() }
Scaffold(
modifier = Modifier.fillMaxSize(),
snackbarHost = {
SnackbarHost(hostState = snackBarState) {
Snackbar {
Text(text = it.visuals.message)
}
}
},
class MainActivity : ComponentActivity() {
private val viewModel by viewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ComposeStateTestTheme {
val state: MainState by viewModel.state.collectAsState()
MainScaffold(
@ExperimentalCoroutinesApi
@Composable
fun LatestNewsFeed(viewModel: NewsViewModel) {
val state = viewModel.newsState.collectAsState()
val lastIndex = state.value.articles.lastIndex
LazyColumnForIndexed(items = state.value.articles) { i, newsItem ->
if (lastIndex == i) {
onActive {
viewModel.getMoreNews()
}
@Composable
fun LazyExampleWithIndex() {
val items = listOf("Cat", "Dog", "Monkey")//1000 of these
val lastIndex = items.lastIndex
LazyColumnForIndexed(items = items) { index, item ->
if (lastIndex == index) {
onActive {
//fetch more items from API
}
}
@Composable
fun LazyList() {
val items = listOf("Dog", "Cat", "Monkey")//1000 of these
LazyColumnFor(items = items) { item ->
Text(text = item)
}
}
@Composable
fun SimpleList() {
Column {
Text("First item")
Text("Second item")
for (i in 0..10) {
Text("Next $i item")
}
}
}
{
"articles": [],
"links": {
"next": "/articles?sort=latest&offset=15&articleOffset=10&limit=10",
"self": "/articles?sort=latest"
}
}
class AdItemHolder(item: View) : BaseHolder(item) {
private val adLabel = item.findViewById<View>(R.id.adlabel)
private val adContent = item.findViewById<View>(R.id.adcontent)
private val labelElevation = item.resources.getDimension(R.dimen.cardview_default_elevation)
init {
item.viewTreeObserver.addOnScrollChangedListener {
val offset = -item.top.toFloat()
adLabel.translationY = Math.max(offset, 0f)
@damianpetla
damianpetla / FadeLineSpan.kt
Last active June 27, 2018 16:14
Fading TexView line
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.graphics.drawable.GradientDrawable
import android.text.Layout
import android.text.style.LeadingMarginSpan
class FadeLineSpan(val fadingLine: Int, color: Int) : LeadingMarginSpan.LeadingMarginSpan2 {