Skip to content

Instantly share code, notes, and snippets.


Tim Rijckaert timrijckaert

View GitHub Profile
View schedule.kt
package com.bnppf.easybanking
import arrow.fx.coroutines.Schedule
import kotlin.time.Duration.Companion.seconds
import kotlin.time.ExperimentalTime
import kotlin.time.TimeMark
import kotlin.time.TimeSource
timrijckaert /
Last active Nov 3, 2022
Some commands useful for debugging deeplinking

Check signature of an APK

keytool -printcert -jarfile file.apk

The SHA256 is the interesting one and need for the assetlink.json

Reverify assetlink

timrijckaert / Cell.kt
Last active Oct 22, 2021
Similar to how Jetpack Compose's Modifier works, but for Cell NEBA
View Cell.kt
package com.bnpp.easybanking.zeplin.molecule
import androidx.annotation.StringRes
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextStyle
import com.bnpp.easybanking.zeplin.molecule.CellData.Companion.DefaultMaxLines
import com.bnpp.easybanking.zeplin.molecule.CellData.Companion.DefaultTextDecoration
import com.bnpp.easybanking.zeplin.molecule.CellData.Companion.DefaultTextModifier
View FlowPlaygroundTest.kt
interface FlowProvider {
fun returnsAColdFlow(): Flow<Int> = flow {
repeat(5) {
object DefaultFlowProvider : FlowProvider
View arrowInjekt.kt
package com.example.sample
import arrow.core.Either
import arrow.core.NonEmptyList
import arrow.core.computations.either
import arrow.core.flatMap
import arrow.core.nonEmptyListOf
import arrow.core.right
import arrow.core.traverseEither
timrijckaert / either.kt
Created Feb 18, 2021
Shameless copied from Arrow Core. However this is ideal to introduce your team to Either without making a big fuzz about adding a new lib with new paradigms.
View either.kt
sealed class Either<out A, out B> {
internal abstract val isRight: Boolean
internal abstract val isLeft: Boolean
fun isLeft(): Boolean = isLeft
timrijckaert / CreditCardFormattingTextWatcher.kt
Created Jan 23, 2021
Inserts spaces after every block of 4 digits
View CreditCardFormattingTextWatcher.kt
class CreditCardTextWatcher(private val maxLength: Int) : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
val textLength = s.length
// first remove any previous span
val spans = s.getSpans(0, s.length,
for (i in spans.indices) {
timrijckaert /
Last active Nov 29, 2022
Fetch Firebase tokens for topic

Firebase Topic Counter

This little script will output the amount of tokens subscribed to a topic.
You will need to replace the variables with your personal ones in order for it to work.

We used this function in a Lambda which sends the results to a monitoring dashboard.

How to get the variables

Screenshots in the comments.

View big-content-view-builder.kt
private fun createNotification(channelId: String, text: String, title: String, id: String, url: String, bigImage: Bitmap, pillImage: Bitmap): Notification {
return NotificationCompat.Builder(context, channelId)
.setContentIntent(createPendingIntent(id, url))
View drawPillViewOnCanvas.kt
PillView(context).run {
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
val bitmap = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_4444)
val canvas = Canvas(bitmap)
layout(0, 0, measuredWidth, measuredHeight)