BlackZerg

Untitled

Jun 21st, 2021
884
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // BroadcastReceiver
  2. class SmsListener: BroadcastReceiver() {
  3.  
  4.     private var smsNotification: SmsNotification? = null
  5.  
  6.     override fun onReceive(context: Context?, intent: Intent?) {
  7.         if (BuildConfig.DEBUG) Log.v(TAG, "SmsListener - Intercept message")
  8.  
  9.         intent?.apply {
  10.             when (action) {
  11.                 SmsRetriever.SMS_RETRIEVED_ACTION -> {
  12.                     val extras = this.extras
  13.                     val status = extras?.get(SmsRetriever.EXTRA_STATUS) as Status
  14.  
  15.                     when (status.statusCode) {
  16.                         CommonStatusCodes.SUCCESS -> {
  17.                             // Get SMS message contents
  18.                             val message = extras.get(SmsRetriever.EXTRA_SMS_MESSAGE).toString()
  19.                             val code = message.filter { it.isDigit() }
  20.                             if (BuildConfig.DEBUG) {
  21.                                 Log.v(TAG, "message => $message")
  22.                                 Log.v(TAG, "Code from SMS is => $code")
  23.                             }
  24.                             Log.v(TAG, "smsNotification => $smsNotification")
  25.                             smsNotification?.codeFromSms(code) //Вот здесь smsNotification = null ?????
  26.                         }
  27.                         CommonStatusCodes.TIMEOUT -> {
  28.                             status.status.statusMessage?.let { smsNotification?.error(it) }
  29.                             if (BuildConfig.DEBUG) Log.v(TAG, "Status => ${status.status}")
  30.                         }
  31.                         else -> Unit
  32.                     }
  33.                 }
  34.             }
  35.         }
  36.     }
  37.  
  38.     fun setListener(listener: SmsNotification) {
  39.         smsNotification = listener
  40.     }
  41. }
  42.  
  43. //Interface
  44. interface SmsNotification {
  45.     fun codeFromSms(code: String)
  46.     fun error(message: String)
  47. }
  48.  
  49. //Fragment
  50. class CodeFragment : Fragment(), SmsNotification {
  51.  
  52.     @Inject
  53.     lateinit var receiver: SmsListener
  54.  
  55.     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  56.         super.onViewCreated(view, savedInstanceState)
  57.         receiver.setListener(this)
  58.     }
  59.  
  60.     override fun onStart() {
  61.         super.onStart()
  62.         registerSmsReceiver()
  63.     }
  64.  
  65.     override fun onPause() {
  66.         super.onPause()
  67.         unregisterSmsReceiver()
  68.     }
  69.  
  70.     private fun registerSmsReceiver() =
  71.         requireActivity().registerReceiver(receiver, IntentFilter(SMS_RETRIEVER))
  72.  
  73.  
  74.     private fun unregisterSmsReceiver() =
  75.         LocalBroadcastManager
  76.             .getInstance(requireContext())
  77.             .unregisterReceiver(receiver)
  78. }
RAW Paste Data