@@ -4,9 +4,20 @@ import android.content.BroadcastReceiver
44import android.content.Context
55import android.content.Intent
66import android.provider.Telephony
7+ import androidx.work.BackoffPolicy
8+ import androidx.work.Constraints
9+ import androidx.work.Data
10+ import androidx.work.NetworkType
11+ import androidx.work.OneTimeWorkRequest
12+ import androidx.work.WorkManager
13+ import androidx.work.Worker
14+ import androidx.work.WorkerParameters
15+ import androidx.work.workDataOf
716import timber.log.Timber
817import java.time.ZoneOffset
918import java.time.ZonedDateTime
19+ import java.time.format.DateTimeFormatter
20+ import java.util.concurrent.TimeUnit
1021
1122class ReceivedReceiver : BroadcastReceiver ()
1223{
@@ -58,9 +69,46 @@ class ReceivedReceiver: BroadcastReceiver()
5869 return
5970 }
6071
61- Thread {
62- Timber .i(" [${sim} ] forwarding received message from [${from} ]" )
63- HttpSmsApiService .create(context).receive(sim, from, to, content, timestamp)
64- }.start()
72+ val constraints = Constraints .Builder ()
73+ .setRequiredNetworkType(NetworkType .CONNECTED )
74+ .build()
75+
76+ val inputData: Data = workDataOf(
77+ Constants .KEY_MESSAGE_FROM to from,
78+ Constants .KEY_MESSAGE_TO to to,
79+ Constants .KEY_MESSAGE_SIM to sim,
80+ Constants .KEY_MESSAGE_CONTENT to content,
81+ Constants .KEY_MESSAGE_TIMESTAMP to DateTimeFormatter .ofPattern(Constants .TIMESTAMP_PATTERN ).format(timestamp).replace(" +" , " Z" )
82+ )
83+
84+ val work = OneTimeWorkRequest
85+ .Builder (ReceivedSmsWorker ::class .java)
86+ .setConstraints(constraints)
87+ .setInputData(inputData)
88+ .build()
89+
90+ WorkManager
91+ .getInstance(context)
92+ .enqueue(work)
93+
94+ Timber .d(" work enqueued with ID [${work.id} ] for received message from [${from} ] to [${to} ]" )
95+ }
96+
97+ internal class ReceivedSmsWorker (appContext : Context , workerParams : WorkerParameters ) : Worker(appContext, workerParams) {
98+ override fun doWork (): Result {
99+ Timber .i(" [${this .inputData.getString(Constants .KEY_MESSAGE_SIM )} ] forwarding received message from [${this .inputData.getString(Constants .KEY_MESSAGE_FROM )} ] to [${this .inputData.getString(Constants .KEY_MESSAGE_TO )} ]" )
100+
101+ if (HttpSmsApiService .create(applicationContext).receive(
102+ this .inputData.getString(Constants .KEY_MESSAGE_SIM )!! ,
103+ this .inputData.getString(Constants .KEY_MESSAGE_FROM )!! ,
104+ this .inputData.getString(Constants .KEY_MESSAGE_TO )!! ,
105+ this .inputData.getString(Constants .KEY_MESSAGE_CONTENT )!! ,
106+ this .inputData.getString(Constants .KEY_MESSAGE_TIMESTAMP )!! ,
107+ )) {
108+ return Result .success()
109+ }
110+
111+ return Result .retry()
112+ }
65113 }
66114}
0 commit comments