Skip to content

Instantly share code, notes, and snippets.

@mutkuensert
mutkuensert / SslUtils.kt
Created June 4, 2024 15:19
Certificate public key to sha256 pin converter
object SslUtils {
fun getBase64UrlEncodedSha256(publicKey: String): String {
return Base64.getUrlEncoder().encodeToString(publicKey.decodeHex())
}
private fun String.decodeHex(): ByteArray {
check(length % 2 == 0) { "Must have an even length" }
return chunked(2)
.map { it.toInt(16).toByte() }
@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 / StringExt.kt
Created November 24, 2023 13:20
My String extensions for Kotlin
fun String.clipString(
firstIndex: Int,
lastIndex: Int,
includeOneChar: Boolean = true
): String {
var word = ""
if (lastIndex >= length) throw IndexOutOfBoundsException()
if (firstIndex == lastIndex) {
@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 / DoubleExt.kt
Last active September 5, 2023 14:21
Digit remover extension for Double.
import java.math.RoundingMode
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols
fun Double.withDecimalDigits(number: Int = 1): Double {
var diesisForDecimals = ""
repeat(number) {
diesisForDecimals += "#"
}
@mutkuensert
mutkuensert / GetPhaseFlow.kt
Last active August 25, 2023 14:42
An helper class for mutkuensert/Android-Phase
import com.github.michaelbull.result.Result
import com.github.michaelbull.result.onFailure
import com.github.michaelbull.result.onSuccess
import com.mutkuensert.androidphase.Phase
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
@mutkuensert
mutkuensert / Reverse-Integer.kt
Last active August 15, 2023 09:48
My Leetcode Problem Solutions
// O(n)
class Solution {
fun reverse(x: Int): Int {
var reversed = 0
var number = x
while (number != 0) {
val remainder = number % 10
reversed = reversed * 10 + remainder
@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()