Skip to content

Instantly share code, notes, and snippets.

@yandroidUA
yandroidUA / BottomSpaceDecoration.txt
Created September 9, 2020 06:44
BottomSpaceDecoration for RecyclerView item
import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView
// ViewHolder of current item, index of item, itemsCount
typealias SpacePredictor = (RecyclerView.ViewHolder, Int, Int) -> Boolean
class BottomSpaceToTopItemDecoration(
val predictor: SpacePredictor
) : RecyclerView.ItemDecoration() {
@yandroidUA
yandroidUA / AudioRecorder.ios.kt
Last active January 25, 2024 14:58
iOS AudioRecorder
package com.app.animalcare.client.common.utils.audio
import io.github.aakira.napier.Napier
import kotlinx.cinterop.*
import platform.AVFAudio.*
import platform.CoreAudioTypes.kAudioFormatMPEG4AAC
import platform.Foundation.NSError
import platform.Foundation.NSURL
data class LocalUrl(
@yandroidUA
yandroidUA / ByteUtils.kt
Last active January 25, 2024 14:59
NSData to ByteArray
@OptIn(ExperimentalForeignApi::class, BetaInteropApi::class)
internal inline fun ByteArray.toData(offset: Int = 0, length: ULong = size.toULong()): NSData {
if (isEmpty()) return NSData()
val pinned = pin()
return NSData.create(
bytesNoCopy = pinned.addressOf(offset),
length = length,
deallocator = { _, _ -> pinned.unpin() }
)
}
@yandroidUA
yandroidUA / AudioPlayer.ios.kt
Created January 25, 2024 14:58
iOS AudioPlayer
import io.github.aakira.napier.Napier
import kotlinx.cinterop.*
import platform.AVFAudio.AVAudioPlayer
import platform.AVFAudio.AVAudioPlayerDelegateProtocol
import platform.Foundation.NSError
import platform.Foundation.NSURL
import kotlin.time.Duration
import kotlin.time.DurationUnit
import kotlin.time.ExperimentalTime
import kotlin.time.toDuration