Skip to content

Instantly share code, notes, and snippets.

View mutkuensert's full-sized avatar

M. Utku Ensert mutkuensert

View GitHub Profile
@mutkuensert
mutkuensert / KSerializerExample.kt
Created October 22, 2024 11:13
SerialDescriptor example
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
import kotlinx.serialization.descriptors.element
import kotlinx.serialization.encoding.CompositeDecoder
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.encoding.decodeStructure
@mutkuensert
mutkuensert / ChangeLog.groovy
Last active March 22, 2024 16:09
Change log methods
ext.getChangeLog = { lastCommitsCount = 10 ->
return formatGitLog(getGitLogUntilCommitNumber(lastCommitsCount))
}
ext.getReleaseChangeLog = {
def lastTag = getLastTag()
return formatGitLog(getGitLogUntilTag(lastTag))
}
@mutkuensert
mutkuensert / Memory.kt
Created March 20, 2024 13:17
Getting total memory of Android device
val activityManager = (context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager)
val memoryInfo = ActivityManager.MemoryInfo()
activityManager.getMemoryInfo(memoryInfo)
val totalMemory = memoryInfo.totalMem
@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 / RequestRateLimiterInterceptor.kt
Last active December 8, 2025 18:39
Throws error if same request is done in 10 seconds.
private const val PREFS_REQUEST_RATE_LIMITER = "request-rate-preferences"
private const val KEY_LAST_URL = "lastUrl"
private const val KEY_LAST_REQUEST_TIME = "lastRequestTime"
class RequestRateLimiterInterceptor(context: Context) : Interceptor {
private val preferences =
context.getSharedPreferences(PREFS_REQUEST_RATE_LIMITER, 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()