Skip to content

Instantly share code, notes, and snippets.

@umpteenthdev
umpteenthdev / SendMultipart.kt
Last active July 17, 2025 18:01
Ktor Client. How to send byteArray using multipart/form data
import io.ktor.client.HttpClient
import io.ktor.client.call.call
import io.ktor.client.engine.okhttp.OkHttp
import io.ktor.client.request.forms.MultiPartFormDataContent
import io.ktor.client.request.forms.formData
import io.ktor.client.request.url
import io.ktor.http.Headers
import io.ktor.http.HttpHeaders
import io.ktor.http.HttpMethod
import kotlinx.coroutines.GlobalScope
@umpteenthdev
umpteenthdev / FileInfoDetector.kt
Created January 21, 2019 06:28
How to get MimeType and file extension from byte array on Android
import android.webkit.MimeTypeMap
import java.net.URLConnection
fun getFileInfo(bytes: ByteArray): Pair<String?, String?> {
val mime = URLConnection.guessContentTypeFromStream(bytes.inputStream())
val extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mime)
return mime to extension
}
@umpteenthdev
umpteenthdev / BlurTransformation.kt
Created January 21, 2019 09:08
Glide blur transformation
import android.content.Context
import android.graphics.Bitmap
import android.renderscript.Allocation
import android.renderscript.Element
import android.renderscript.RenderScript
import android.renderscript.ScriptIntrinsicBlur
import com.bumptech.glide.load.Key
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
import java.security.MessageDigest
@umpteenthdev
umpteenthdev / SocketConnectionChecker.kt
Created January 22, 2019 04:32
How to check internet connection fastly
import java.net.InetSocketAddress
import java.net.Socket
class SocketConnectionChecker(
private val timeout: Int = 1000,
private val hostname: String = "8.8.8.8",
private val port: Port = Port.DNS
) {
fun isConnected(): Boolean =
@umpteenthdev
umpteenthdev / Iso8601SimpleDateFormatParser.kt
Created January 25, 2019 07:32
How to parse ISO 8601 String to Date. SimpleDateFormat
import java.text.SimpleDateFormat
import java.util.*
fun toDate(text: String): Date {
val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ")
val modifiedText = text.substring(0..25) + "GMT" + text.substring(26)
return dateFormat.parse(modifiedText)
}
@umpteenthdev
umpteenthdev / VectorToBitmap.kt
Created February 16, 2019 06:40
How to get bitmap from vector
fun Context.vectorToBitmap(@DrawableRes id: Int): Bitmap {
val drawable = ContextCompat.getDrawable(this, id)!!
val bitmap = Bitmap.createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
drawable.setBounds(0, 0, canvas.width, canvas.height)
drawable.draw(canvas)
return bitmap
}
@umpteenthdev
umpteenthdev / RegexInputFilter.kt
Last active November 25, 2019 12:59
Android input filter implemented using regular expressions
import android.text.InputFilter
import android.text.Spanned
abstract class SuggestedInputFilter : InputFilter {
override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int): CharSequence? {
val suggestedResult = dest.replaceRange(dstart, dend, source)
val cancelResult = dest.slice(dstart until dend)
return if (accept(suggestedResult)) null else cancelResult
}
@umpteenthdev
umpteenthdev / Additional info.md
Last active March 14, 2019 05:18
File uploader, image compressor (Android). Kotlin. Coroutines.

Dependencies

implementation "androidx.exifinterface:exifinterface:1.0.0"

@umpteenthdev
umpteenthdev / BigDecimalUtils.kt
Created February 22, 2019 10:18
Useful extension for `BigDecimal`
import java.math.BigDecimal
import java.math.RoundingMode
val BigDecimal.fractionLength: Int
get() =
stripTrailingZeros().toPlainString().substringAfterLast(".", "").length
infix fun BigDecimal.isValueEquals(another: BigDecimal?): Boolean {
if (another == null) return false
return compareTo(another) == 0
@umpteenthdev
umpteenthdev / Coordinate.kt
Created March 11, 2019 10:04
Base class that describes a coordinate (in decimal degrees)
import kotlin.math.*
const val EARTH_RADIUS_METERS = 6378137
data class Coordinate(
val latitude: Double,
val longitude: Double
) {
/**