Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save IvanAbakumov/e3e2f66a74bbf1592c43037026b45ce2 to your computer and use it in GitHub Desktop.
Save IvanAbakumov/e3e2f66a74bbf1592c43037026b45ce2 to your computer and use it in GitHub Desktop.
class SMSReceiver : BroadcastReceiver() {
companion object {
private const val VALIDATE_MASK = ".*Maliava auth code:? ([0-9]{6}).*"
}
private var listener: WeakReference<OnSMSReceiveListener>? = null
fun setListener(listener: OnSMSReceiveListener) {
this.listener = listener.weak()
}
override fun onReceive(context: Context, intent: Intent) {
val pudsBundle = intent.extras
val pdus = pudsBundle.get("pdus") as Array<Any>
val messages = SmsMessage.createFromPdu(pdus[0] as ByteArray)
Log.i("Tag ", " received" + messages.messageBody)
listener?.get()?.onSMSReceived(validate(messages.messageBody))
Log.i("Tag ", " validate" + validate(messages.messageBody))
}
private fun validate(body: String): String? {
if (!Pattern.compile(VALIDATE_MASK, Pattern.DOTALL).matcher(body).matches()) return null
val p = Pattern.compile("(\\d+)")
val m = p.matcher(body)
var ret = ""
while (m.find()) {
ret += m.group()
}
return ret
}
}
interface OnSMSReceiveListener {
fun onSMSReceived(sms: String?)
}
// for fragment
val filter = IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)
override fun onStart() {
super.onStart()
smsReceiver = SMSReceiver().apply { setListener(this@VerifyFragment) }
}
override fun onResume() {
super.onResume()
(activity as? AppCompatActivity)?.registerReceiver(smsReceiver, filter)
}
override fun onPause() {
super.onPause()
activity?.unregisterReceiver(smsReceiver)
}
override fun onDetach() {
super.onDetach()
smsReceiver = null
}
override fun onSMSReceived(sms: String?) {
verifyNumberView.text?.clear()
sms ?: return
for (i in 0 until sms.length) {
verifyNumberView.postDelayed({
verifyNumberView.append(Character.toString(sms[i]))
}, (i * 200).toLong())
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment