Skip to content

Instantly share code, notes, and snippets.

View amal's full-sized avatar
👨‍💻

Art Shendrik amal

👨‍💻
View GitHub Profile
@amal
amal / Float128.java
Created October 21, 2017 16:28 — forked from rjeschke/Float128.java
128 bit floats in software (Java)
/*
* Copyright (C) 2012 René Jeschke <[email protected]>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
@amal
amal / ancient-assyrian-palace-iraq.html
Last active May 31, 2018 22:26
Aljazeera.com page html source example

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0 maximum-scale=1.0, minimal-ui" />
@amal
amal / androidx-migration-script.kts
Created August 3, 2019 02:03
AndroidX migration kotlin (KTS) script
import java.io.File
import java.nio.file.*
import java.nio.file.attribute.BasicFileAttributes
// Simple helper for AndroidX migration, written as Kotlin script
// Can be better then Android Studio migration
// But use at your own risk ;)
@amal
amal / Tooltip.kt
Last active July 10, 2024 15:05
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
@amal
amal / ParallaxScreen.kt
Created September 29, 2022 14:26 — forked from surajsau/ParallaxScreen.kt
Parallax effect with Jetpack Compose
@Composable
fun ParallaxScreen(modifier: Modifier = Modifier) {
val context = LocalContext.current
val scope = rememberCoroutineScope()
var data by remember { mutableStateOf<SensorData?>(null) }
DisposableEffect(Unit) {
val dataManager = SensorDataManager(context)
dataManager.init()
@amal
amal / gist:2cb237497bb296e7c3a7da658734973a
Last active March 19, 2023 21:16 — forked from yorickhenning/gist:3275ea38e1619a5c8aa0efac9370484d
Reentrance checking coroutine Mutex
// https://github.com/Kotlin/kotlinx.coroutines/issues/3626#issuecomment-1451115356
// https://github.com/Kotlin/kotlinx.coroutines/issues/3626#issuecomment-1452820863
suspend fun <ReturnT> Mutex.checkedWithLock(
block: suspend () -> ReturnT
): ReturnT {
val element = LockedMutexesElement(this).key
check (currentCoroutineContext()[element] == null) {
"Reentered Mutex"
}
@amal
amal / gradle_snippet.kt
Created June 1, 2023 11:04 — forked from cies/gradle_snippet.kt
Make Gradle print its task plan
// This prints the dependencies of each task in the current execution graph
gradle.taskGraph.whenReady(
closureOf<TaskExecutionGraph> {
println("About to run ${allTasks.size} tasks: (use `-i` to see why tasks are skipped, use `--rerun-tasks` to prevent UP-TO-DATE checks)")
allTasks.forEachIndexed { i, task ->
val dependenciesString =
if (task.dependsOn.isEmpty()) {
""
} else {
task.dependsOn.joinToString(", ", " (depends on ", ")") { dependency ->
@amal
amal / InPlaceCombinedFlow.kt
Created August 31, 2023 14:47
In-place StateFlow implementations
import kotlinx.coroutines.flow.FlowCollector
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
/**
* Replacement for [combine][kotlinx.coroutines.flow.combine] operation for [StateFlow]s.
* Keeps the result as a [StateFlow], provides realtime results ([StateFlow] result).
* Also reduces number of allocations.
*
* @see kotlinx.coroutines.flow.combine
@amal
amal / StackNavigator.kt
Created March 12, 2024 16:20 — forked from Nek-12/StackNavigator.kt
Decompose - Global navigation events with channel
internal class StackComponent(context: ComponentContext): Component {
private val results = Channel<NavResult<*>>(Channel.CONFLATED)
inline fun <reified R> sendResult(result: R) {
val config = stack.active.configuration
// or popWhile - bring desired page to the front
navigation.pop {
results.trySend(NavResult(config, result))