Skip to content

Instantly share code, notes, and snippets.

Robin roschlau

Block or report user

Report or block roschlau

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
roschlau /
Created Mar 25, 2019
Sharing test sources in gradle
configurations {
// Creating testOutput configuration to bundle test dependencies and sources so other projects can depend on them
dependencies {
testOutput sourceSets.test.output
roschlau / rainbow_brackets.xml
Created Nov 7, 2018
Rainbow Brackets Config
View rainbow_brackets.xml
<component name="RainbowSettings">
<option name="darkRoundBracketsColors">
<option value="0x4f5b62" />
<option value="0x718792" />
<option value="0x8eacbb" />
<option value="0xc1d5e0" />
<option value="0xfefefe" />
roschlau / ValueTypes.kt
Created Sep 8, 2018
A collection of type wrappers that work similar to Kotlin's inline classes, but for Kotlin < 1.3
View ValueTypes.kt
import java.util.UUID
* Superclass for classes that wrap a single value for type safety purposes.
abstract class WrapperType<T : Any>(val value: T) {
override fun toString() = value.toString()
override fun equals(other: Any?) = other is WrapperType<*> && value == other.value
override fun hashCode() = value.hashCode()
roschlau / ImmutableHelpers.kt
Created Mar 19, 2018
Some helpers for working with immutable collections in Kotlin
View ImmutableHelpers.kt
* Returns a new List with the element at [fromIndex] moved to [toIndex]
private fun <T> List<T>.move(fromIndex: Int, toIndex: Int) = this.mapIndexed { index, element -> when {
index == toIndex -> this[fromIndex]
fromIndex < toIndex && index in fromIndex..toIndex -> this[index + 1]
fromIndex > toIndex && index in toIndex..fromIndex -> this[index - 1]
else -> element
} }
roschlau / memoized.kt
Created Sep 21, 2017
Simple function to memoize function calls
View memoized.kt
fun <T, U> memoized(function: (T) -> U): (T) -> U {
val cache = mutableMapOf<T, U>()
return { t -> cache.getOrPut(t) { function(t) } }
roschlau / BaseActivity.kt
Last active Mar 19, 2018
Utility class for handling permissions on Android
View BaseActivity.kt
class BaseActivity : Activity {
val permissionHandler: PermissionRequestHandler
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
val handled = permissionHandler.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(!handled) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
roschlau / DiffUtilCallback.kt
Last active Mar 5, 2017
Default implementation of a DiffUtil.Callback
View DiffUtilCallback.kt
open class DiffUtilCallback<T>(val oldList: List<T>, val newList: List<T>) : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int)
= oldList[oldItemPosition] == newList[newItemPosition]
override fun getOldListSize()
= oldList.size
roschlau / DeferPanicRecover.kt
Last active Aug 16, 2018
Implementing the defer, panic and recover functions from golang in Kotlin, because reasons. I have hardly any knowledge of Go, I googled a little bit about how those functions work. The example is copied from and results in exactly the same output.
View DeferPanicRecover.kt
import java.util.Optional
// Actual implementation
fun <T> deferringScope(block: DeferringScope<T>.() -> T): Optional<T> {
val scope = DeferringScope<T>()
try {
scope.result = Optional.of(scope.block())
} catch (e: Throwable) {
scope.error = e.message ?: e.toString()
roschlau /
Created Sep 7, 2016
An ItemDecoration that assigns even spacing to a grid of items, with the spacing between the items the same size as the outer spacing of the grid.
import android.view.View;
public class GridSpacingDecoration extends RecyclerView.ItemDecoration {
private int cols;
private int spacing;
public GridSpacingDecoration(int cols, int spacing) {
roschlau / Repeater.kt
Last active Mar 16, 2017
A simple repeater that will repeat an action infinitely with a set interval until it is stopped. Uses Coroutines.
View Repeater.kt
class Repeater(val interval: Long,
val context: CoroutineContext = UI,
val block: () -> Unit
) {
private var updatingJob: Job? = null
private val updatingJobLock = Any()
fun start() = synchronized(updatingJobLock) {
if (updatingJob != null && updatingJob!!.isActive) {
You can’t perform that action at this time.