Skip to content

Instantly share code, notes, and snippets.

View masoudkarimi's full-sized avatar
👨‍💻
At work

Masoud Karimi masoudkarimi

👨‍💻
At work
  • ICE Global
  • Tehran/Iran
View GitHub Profile
@masoudkarimi
masoudkarimi / #SMS Retriever
Last active July 12, 2023 09:14
SMS retriever using play service API and Kotlin delegates
An implementation of SMS Retriever API using Kotlin Delegates to simplify the usage.
class PaddingRightSpan(private val mPadding: Int) : ReplacementSpan() {
override fun getSize(
paint: Paint, text: CharSequence,
start: Int, end: Int,
fm: Paint.FontMetricsInt?
): Int {
val widths = FloatArray(end - start)
paint.getTextWidths(text, start, end, widths)
var sum = 0
for (i in widths.indices) {
private fun formatDebitCard(editable: Editable, paddingPx: Int) {
val textLength = editable.length
// first remove any previous span
val spans = editable.getSpans(
0, editable.length,
PaddingRightSpan::class.java
)
for (i in spans.indices) {
editable.removeSpan(spans[i])
}
@masoudkarimi
masoudkarimi / addTextWatcher.kt
Created October 12, 2021 18:32
Adding TextWatcher
etCardNumber.doAfterTextChanged { editable ->
if (editable == null) return
val paddingPx = etCardNumber.paint.measureText("X").toInt()
formatDebitCard(editable, paddingPx)
}
@masoudkarimi
masoudkarimi / PaddingRightSpan.kt
Created October 12, 2021 18:05
Masked Input EditText
class PaddingRightSpan(private val mPadding: Int) : ReplacementSpan() {
override fun getSize(
paint: Paint, text: CharSequence,
start: Int, end: Int,
fm: Paint.FontMetricsInt?
): Int {
val widths = FloatArray(end - start)
paint.getTextWidths(text, start, end, widths)
var sum = 0
for (i in widths.indices) {
package com.your.package
import android.graphics.Canvas
import android.graphics.Paint
import android.text.Editable
import android.text.Spannable
import android.text.TextWatcher
import android.text.style.ReplacementSpan
import android.widget.TextView
import java.text.DecimalFormatSymbols
@masoudkarimi
masoudkarimi / Extensions.kt
Last active October 12, 2021 18:27
OTP EditText
package mkn.libs.otp
import android.content.res.Resources
import kotlin.math.ceil
fun Int.dpf(): Float {
return this.dp().toFloat()
}
@masoudkarimi
masoudkarimi / PaddingRightSpan.kt
Last active September 19, 2020 18:18
Padding Right Span
class PaddingRightSpan(private val mPadding: Int) : ReplacementSpan() {
override fun getSize(
paint: Paint, text: CharSequence,
start: Int, end: Int,
fm: Paint.FontMetricsInt?
): Int {
val widths = FloatArray(end - start)
paint.getTextWidths(text, start, end, widths)
var sum = 0
for (i in widths.indices) {
@masoudkarimi
masoudkarimi / formatDebitCard.kt
Created September 19, 2020 18:01
Formatting DebitCard
private fun formatDebitCard(editable: Editable, paddingPx: Int) {
val textLength = editable.length
// first remove any previous span
val spans = editable.getSpans(
0, editable.length,
PaddingRightSpan::class.java
)
for (i in spans.indices) {
editable.removeSpan(spans[i])
}
@masoudkarimi
masoudkarimi / addTextWatcher.kt
Created September 19, 2020 17:46
Adding TextWatcher
etCardNumber.doAfterTextChanged { editable ->
if (editable == null) return
val paddingPx = etCardNumber.paint.measureText("X").toInt()
formatDebitCard(editable, paddingPx)
}