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 / RoundedBottomSheetDialogFragment.kt
Created September 30, 2018 10:35 — forked from ArthurNagy/RoundedBottomSheetDialogFragment.kt
Rounded modal bottom sheet as seen in new Google products(Tasks, News, etc.), described in this article: https://medium.com/halcyon-mobile/implementing-googles-refreshed-modal-bottom-sheet-4e76cb5de65b
package com.your.package
import android.app.Dialog
import android.os.Bundle
import com.your.package.R
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
/**
* BottomSheetDialog fragment that uses a custom
@masoudkarimi
masoudkarimi / PaddingRightSpan.kt
Created September 16, 2020 20:39
Mask Edittext with 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 = mPadding
for (i in widths.indices) {
@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)
}
@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 / 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 / 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()
}
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 / 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) {
@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)
}
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])
}