View TintModifier.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import androidx.compose.ui.Modifier | |
import androidx.compose.ui.draw.DrawModifier | |
import androidx.compose.ui.geometry.Rect | |
import androidx.compose.ui.graphics.BlendMode | |
import androidx.compose.ui.graphics.Color | |
import androidx.compose.ui.graphics.ColorFilter | |
import androidx.compose.ui.graphics.Paint | |
import androidx.compose.ui.graphics.drawscope.ContentDrawScope | |
import androidx.compose.ui.graphics.drawscope.drawIntoCanvas |
View CameraControllCompose.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import androidx.camera.core.CameraSelector | |
import androidx.camera.view.CameraController | |
import androidx.camera.view.LifecycleCameraController | |
import androidx.compose.runtime.Composable | |
import androidx.compose.runtime.CompositionLocalProvider | |
import androidx.compose.runtime.LaunchedEffect | |
import androidx.compose.runtime.compositionLocalOf | |
import androidx.compose.runtime.getValue | |
import androidx.compose.runtime.mutableStateOf | |
import androidx.compose.runtime.remember |
View MlKitAnalyzerKtx.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Converts [MlKitAnalyzer.Result] into [kotlin.Result] | |
* @param detector Any [Detector] | |
* @returns [kotlin.Result] | |
*/ | |
fun <T> MlKitAnalyzer.Result.toResult(detector: Detector<T>): Result<T> = | |
kotlin.runCatching { | |
val value = getValue(detector) ?: throw getThrowable(detector)!! | |
value | |
} |
View CancelFlow.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Cancels current flow when the predicate is matched, throws [CancellationException] up in | |
* current coroutine. | |
* @param cause class that will be used as cause for [CancellationException] | |
* @param predicate if result of this function is [true] then the flow is stopped | |
*/ | |
inline fun <T> Flow<T>.cancelWhen( | |
cause: KClass<out Throwable>? = null, | |
crossinline predicate: (T) -> Boolean | |
): Flow<T> = transform { |
View KSPExtensions.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.google.devtools.ksp.getClassDeclarationByName | |
import com.google.devtools.ksp.processing.Resolver | |
import com.google.devtools.ksp.symbol.* | |
/** | |
* Reified function to check if receiver [KSType] is assignable from [T] class | |
*/ | |
inline fun <reified T> KSType.isAssignableFrom(resolver: Resolver): Boolean { | |
val classDeclaration = requireNotNull(resolver.getClassDeclarationByName<T>()) { | |
"Unable to resolve ${KSClassDeclaration::class.simpleName} for type ${T::class.simpleName}" |
View RegisterForActivityResultDetector.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (C) 2020 Nikola Despotoski | |
* | |
* 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 |
View FlowIterable.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
suspend fun <T, R : Iterable<T>> Flow<Iterable<T>>.filterIterable(predicate: suspend (T) -> Boolean): Flow<R> = | |
transform { | |
flow { | |
val emitted = arrayListOf<T>() | |
for (item in it) { | |
if (predicate(item)) { | |
emitted.add(item) | |
} | |
} | |
emit(emitted) |
View TaskKt.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
suspend fun <TResult> Task<TResult>.awaitTask() = | |
suspendCancellableCoroutine<Task<TResult>> { continuation -> | |
addOnCompleteListener { | |
continuation.resume(it) | |
} | |
} | |
suspend fun <TResult> Task<TResult>.awaitTaskResult() = | |
suspendCancellableCoroutine<TResult> { continuation -> | |
addOnCanceledListener { |
View AnimationKtx.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
data class AnimationListenerChain(val animation: Animation, val listener: Animation.AnimationListener = object : Animation.AnimationListener() { | |
override fun onAnimationStart(animation: Animation?) {} | |
override fun onAnimationEnd(animation: Animation?) {} | |
override fun onAnimationRepeat(animation: Animation?) {} | |
}) | |
inline fun Animation.doOnStart(crossinline onStart: () -> Unit): AnimationListenerChain { | |
val chain = AnimationListenerChain(this) |
View ChainActivityResultCallback.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
operator fun <O> ActivityResultCallback<O>.plus(another: ActivityResultCallback<O>) = ActivityResultCallback<O> { | |
this@plus.onActivityResult(it) | |
another.onActivityResult(it) | |
} |
NewerOlder