Skip to content

Instantly share code, notes, and snippets.


Tim Rijckaert timrijckaert

View GitHub Profile
View create-big-content-view.kt
private fun createBigContentView(text: String, bigImage: Bitmap, pill: Bitmap) =
RemoteViews(context.packageName, R.layout.notification_big_content_view).apply {
setImageViewBitmap(, bigImage)
setImageViewBitmap(, pill)
setTextViewText(, text)
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)
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))
timrijckaert /
Last active Oct 7, 2020
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.

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 / 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
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
View FlowPlaygroundTest.kt
interface FlowProvider {
fun returnsAColdFlow(): Flow<Int> = flow {
repeat(5) {
object DefaultFlowProvider : FlowProvider
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