Skip to content

Instantly share code, notes, and snippets.

View andhikayuana's full-sized avatar
🌏
bertapa

Andhika Yuana andhikayuana

🌏
bertapa
View GitHub Profile

Kotlin Flow Cheat Sheet

Flow Types

Flow Type Purpose Key Features Use Case
flow {} Creates a cold flow that emits values lazily. Emits values only when collected.
Supports suspending functions.
Creating custom flows to emit data on demand.
flowOf() Creates a flow from a fixed set of values. Emits provided values sequentially.
Cold by nature.
Emit predefined values (e.g., configuration settings).
asFlow() Converts collections, sequences, arrays, or ranges to flows. Supports many standard types.
Cold by nature.
Convert lists or arrays into flows for processing.
`c
/**
* Simple XML parser
* @param {String} xml
* @return {Object}
*/
function parseXML(xml) {
var beg = -1;
var end = 0;
var tmp = 0;
@andhikayuana
andhikayuana / InitChannelsBroadcastReceiver.kt
Created October 6, 2024 14:30 — forked from ademirqueiroga/InitChannelsBroadcastReceiver.kt
InitChannelsBroadcastReceiver implementation
class InitChannelsBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent?) {
if (defaultChannelAlreadyAdded) {
// Make sure we are not trying to re-create the channel if it's already added.
// You can save this on your shared preferences or database.
return
}
val channelHelper = PreviewChannelHelper(context)
val channel = Channel.Builder()
.setType(TvContractCompat.Channels.TYPE_PREVIEW)
@andhikayuana
andhikayuana / worksheet-generators.md
Created September 25, 2024 04:46 — forked from lewdev/worksheet-generators.md
🏫📄 Worksheet Generators List
@andhikayuana
andhikayuana / Main.kt
Created August 30, 2024 21:53 — forked from alexfacciorusso/Main.kt
Start recording Skia frames in SKP files from Kotlin Compose Desktop
fun main() = application {
Window(onCloseRequest = ::exitApplication) {
LaunchedEffect(Unit) {
window.attachSkiaDebugger()
}
MaterialTheme {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.background(Color.LightGray).height(IntrinsicSize.Min)
) {
@andhikayuana
andhikayuana / compress_video
Created August 22, 2024 09:51 — forked from trvswgnr/compress_video
portable shell script to compress videos with ffmpeg
#!/bin/sh
print_usage() {
echo "usage: compress_video <input_file>"
echo "supported formats: mp4, webm, mkv, mov, avi, flv"
}
get_extension() {
f="${1##*/}"
case "$f" in
@andhikayuana
andhikayuana / Scrollbar.kt
Created July 24, 2024 08:59 — forked from mxalbert1996/Scrollbar.kt
Modifiers to draw scrollbars in Jetpack Compose
/*
* MIT License
*
* Copyright (c) 2022 Albert Chang
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
@andhikayuana
andhikayuana / Tooltip.kt
Created July 10, 2024 15:05 — forked from amal/Tooltip.kt
How to show a tooltip in AndroidX Jetpack Compose?
@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
// Tooltip implementation for AndroidX Jetpack Compose
// See usage example in the next file
// Tested with Compose version **1.1.0-alpha06**
// Based on material DropdownMenu implementation.
import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.animation.core.animateFloat
@andhikayuana
andhikayuana / DatabaseQueueMonitorCommand.php
Created July 5, 2024 00:59 — forked from BenCavens/DatabaseQueueMonitorCommand.php
Laravel queue monitoring on shared hosting
<?php
namespace App\Queue;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class DatabaseQueueMonitorCommand extends Command
{
@andhikayuana
andhikayuana / build.gradle
Created June 29, 2024 19:36 — forked from MinceMan/build.gradle
Change output file name for Android with build.gradle
apply plugin: 'com.android.library'
/** This closure will rename your output file with your outputName, versionName and git commit. */
android.metaClass.renameVariants = { String moduleName, String outputName ->
def isApplication = binding.variables.containsKey('applicationVariants')
def variants = isApplication ? applicationVariants : libraryVariants
def gitCommit = "git rev-parse --short HEAD".execute().text.trim()
def ext = isApplication ? '.apk' : '.aar'
variants.all { -> outputs.each {