Skip to content

Instantly share code, notes, and snippets.

View ch4vi's full-sized avatar
🥘
Working on things

Xavi Anyó ch4vi

🥘
Working on things
View GitHub Profile
@ch4vi
ch4vi / Result.kt
Created May 22, 2019 14:46
My approximation to Railway oriented programing based on https://gist.github.com/antonyharfield/1928d02a1163cf115d701deca5b99f63
sealed class Result<T> {
data class Success<T>(val value: T) : Result<T>()
data class Failure<T>(val message: String? = null) : Result<T>()
val isSuccess get() = this is Success
val isFailure get() = this is Failure
fun <T> success(v: T) = Success(v)
fun <T> failure(m: String? = null) = Failure<T>(m)
@ch4vi
ch4vi / ExampleActivity.kt
Created June 28, 2018 10:06
WormIndicator written in Kotlin based on com.tbuonomo.viewpagerdotsindicator
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.example_layout)
if (savedInstanceState == null) {
viewPager.adapter = PagerAdapter(supportFragmentManager)
dotsIndicator.setViewPager(viewPager)
}
}
@ch4vi
ch4vi / DotsIndicator.kt
Last active June 28, 2018 10:07
DotsIndicator written in Kotlin based on com.tbuonomo.viewpagerdotsindicator
import android.content.Context
import android.database.DataSetObserver
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.support.v4.view.ViewPager
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.widget.FrameLayout
@ch4vi
ch4vi / LiveDataPromise.kt
Last active February 1, 2019 08:56
Concatenate LiveData
fun <T, R> LiveData<T>.then(callback: (T) -> LiveData<R>): LiveData<R> {
return Transformations.switchMap(this, {
result(it)
})
}
@ch4vi
ch4vi / KTruss.kt
Last active April 28, 2020 15:48
An adaptation of Truss from JakeWharton wrote in kotlin
import android.text.SpannableStringBuilder
import android.text.Spanned.SPAN_INCLUSIVE_EXCLUSIVE
import java.util.*
/** A [SpannableStringBuilder] wrapper whose API doesn't make me want to stab my eyes out. */
class KTruss {
private val builder: SpannableStringBuilder = SpannableStringBuilder()
private val stack: Deque<Span> = ArrayDeque<Span>()
fun append(string: String): KTruss {