Skip to content

Instantly share code, notes, and snippets.

@mutkuensert
mutkuensert / NavArgEncoder.kt
Created March 6, 2024 15:28
A function to convert objects to string json.
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
inline fun <reified T> encodeToStringNavArg(arg: T): String {
@OptIn(ExperimentalSerializationApi::class)
val json = Json {
ignoreUnknownKeys = true
@mutkuensert
mutkuensert / GenericRemoteMediator.kt
Created September 19, 2023 13:02
An helper class to create remote mediator easily.
import androidx.paging.ExperimentalPagingApi
import androidx.paging.LoadType
import androidx.paging.PagingState
import androidx.paging.RemoteMediator
import com.github.michaelbull.result.Result
import com.github.michaelbull.result.get
import com.github.michaelbull.result.onFailure
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@mutkuensert
mutkuensert / SequentialRequestInterceptor.kt
Created August 8, 2023 20:38
Throws error if same request is done in 10 seconds.
private const val PREFS_SEQUENTIAL_REQUEST = "sequential-request-preferences"
private const val KEY_LAST_URL = "lastUrl"
private const val KEY_LAST_REQUEST_TIME = "lastRequestTime"
class SequentialRequestInterceptor(context: Context) : Interceptor {
private val preferences =
context.getSharedPreferences(PREFS_SEQUENTIAL_REQUEST, Context.MODE_PRIVATE)
override fun intercept(chain: Interceptor.Chain): Response {
val baseRequest = chain.request()
@mutkuensert
mutkuensert / Converters.kt
Created March 13, 2023 06:22
LocalDateTime converters for room database
import androidx.room.TypeConverter
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.ZoneOffset
class Converters {
@TypeConverter
fun fromLocalDatetime(value: LocalDateTime?): Long? {
return value?.atZone(ZoneId.of(ZoneOffset.systemDefault().id))?.toInstant()?.toEpochMilli()