Skip to content

Instantly share code, notes, and snippets.

Sebastiano Poggi rock3r

Block or report user

Report or block rock3r

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
@rock3r
rock3r / build.gradle.kts
Created Jun 21, 2019
A Gradle Kotlin DSL task to enumerate the resolved Kotlin plugin version for all subprojects
View build.gradle.kts
tasks.register("kotlinPluginVersions") {
description = "Shows the resolved Kotlin plugin version for all subprojects"
group = "documentation"
doLast {
subprojects.forEach { subproject ->
System.err.println("****** Project ${subproject.name} plugins ******")
subproject.plugins.filterIsInstance<KotlinBasePluginWrapper>()
.forEach {
System.err.println("Kotlin plugin ${it.kotlinPluginVersion}")
}
View SideEffects.kt
package me.seebrock3r.util
/**
* Calls the specified function [block] as a side effect of a previous expression.
*
* This is similar to [run] in that it's used to chain side effects, but it
* doesn't return anything and the block doesn't have any parameters. If your
* side effects require either of those things, use [run] or [also] instead.
*
* @see run
@rock3r
rock3r / CacheableProperty.kt
Created Jan 8, 2019
A cacheable property in Kotlin — basically, a variant of Lazy that can be invalidated and will be reloaded on the next access
View CacheableProperty.kt
package me.seebrock3r.util
import me.seebrock3r.util.CacheableProperty.CachedValue.*
import kotlin.properties.*
import kotlin.reflect.*
import kotlin.reflect.jvm.*
fun <T> cache(producer: () -> T): CacheableProperty<T> = CacheableProperty(producer)
class CacheableProperty<out T>(val producer: () -> T) : ReadOnlyProperty<Any, T> {
@rock3r
rock3r / DividerItemDecorator.kt
Created Sep 4, 2018
A simple yet fully featured RecyclerView ItemDecorator that draws a divider line between items. Only works with vertical LinearLayoutManagers!
View DividerItemDecorator.kt
package me.seebrock3r.common.widget
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Rect
import android.view.View
import androidx.annotation.ColorInt
import androidx.annotation.Px
import androidx.core.graphics.withTranslation
import androidx.core.view.children
@rock3r
rock3r / normalizeColorHex.kts
Last active Mar 24, 2019
A Kotlin script to normalize hex colour representations ("#RGB", "#ARGB", "#RRGGBB", "#AARRGGBB") into "#AARRGGBB", useful for when you're trying to find all unique colours in your app
View normalizeColorHex.kts
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* Sebastiano Poggi wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a beer in return. Seb
* ----------------------------------------------------------------------------
* Feel free to attribute this code in compiled products if you feel like it,
* but it's not required.
*/
@rock3r
rock3r / RxFilterIsInstance.kt
Last active Jun 22, 2018
RxKotlin's ofType() name is not very easy to remember, given Kotlin has filterIsInstance() for the same. This helps alleviate the pain.
View RxFilterIsInstance.kt
package me.seebrock3r.extensions.reactivex
import io.reactivex.Flowable
import io.reactivex.Observable
import io.reactivex.rxkotlin.ofType
@Deprecated(
message = "This is just a shorthand for RxKotlin's ofType()",
replaceWith = ReplaceWith("ofType<R>()", "io.reactivex.rxkotlin.ofType")
)
@rock3r
rock3r / gw-update.sh
Created Oct 30, 2017
Simple script to update Gradle from the command line (*NIX)
View gw-update.sh
#!/bin/sh
# License for any modification to the original (linked below):
# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revision 42):
# Sebastiano Poggi wrote this file. As long as you retain
# this notice you can do whatever you want with this stuff. If we meet some day,
# and you think this stuff is worth it, you can buy us a beer in return.
#### SETUP/USAGE INSTRUCTIONS ####
View keybase.md

Keybase proof

I hereby claim:

  • I am rock3r on github.
  • I am rock3r (https://keybase.io/rock3r) on keybase.
  • I have a public key ASAFs_czYB4sp1Df7-lZ0TUdAT-5jye6IxjyE9OKPIVoIwo

To claim this, I am signing this object:

@rock3r
rock3r / AndroidOSVersionCheckerTest.kt
Created Oct 5, 2017
Testable Kotlin Android OS version checker, with tests
View AndroidOSVersionCheckerTest.kt
package me.seebrock3r.utils
import android.os.Build.VERSION_CODES.JELLY_BEAN_MR1
import android.os.Build.VERSION_CODES.JELLY_BEAN_MR2
import android.os.Build.VERSION_CODES.KITKAT
import android.os.Build.VERSION_CODES.LOLLIPOP
import android.os.Build.VERSION_CODES.LOLLIPOP_MR1
import android.os.Build.VERSION_CODES.M
import android.os.Build.VERSION_CODES.N
import org.assertj.core.api.Assertions.assertThat
@rock3r
rock3r / find_in_dependencies.gradle
Last active Oct 10, 2019
Utility Gradle task to find where duplicate classes come from (for Gradle 4.1+)
View find_in_dependencies.gradle
// H/t to https://github.com/ethankhall/scripts/blob/master/gradle/find-file.gradle for the idea;
// this re-written version actually works in modern Gradle and Android Gradle plugins.
task findInDependencies {
doLast {
println()
def resolvableConfigs = project.getConfigurations()
.stream()
.filter { it.isCanBeResolved() }
You can’t perform that action at this time.