diff --git a/app/src/main/java/com/navi/manager/repositories/UserDataRepository.kt b/app/src/main/java/com/navi/manager/repositories/UserDataRepository.kt index 44e74d0af6..750957b357 100644 --- a/app/src/main/java/com/navi/manager/repositories/UserDataRepository.kt +++ b/app/src/main/java/com/navi/manager/repositories/UserDataRepository.kt @@ -9,7 +9,7 @@ package com.navi.manager.repositories import com.navi.models.UserCallLog import com.navi.models.UserInstalledApp import com.navi.models.UserLocation -import com.navi.models.UserSms +import com.navi.models.UserSmsWrapper import com.navi.network.retrofit.ResponseCallback import com.navi.utils.retrofitService @@ -21,8 +21,8 @@ class UserDataRepository : ResponseCallback() { suspend fun postLocation(location: UserLocation) = apiResponseCallback(retrofitService().postLocation(location)) - suspend fun postSms(smsList: List) = - apiResponseCallback(retrofitService().postSms(smsList)) + suspend fun postSms(request: UserSmsWrapper) = + apiResponseCallback(retrofitService().postSms(request)) suspend fun postCallLogs(callLogs: List) = apiResponseCallback(retrofitService().postCallLogs(callLogs)) diff --git a/app/src/main/java/com/navi/manager/workers/UserSmsWorker.kt b/app/src/main/java/com/navi/manager/workers/UserSmsWorker.kt index 6c55904e3f..b62f789794 100644 --- a/app/src/main/java/com/navi/manager/workers/UserSmsWorker.kt +++ b/app/src/main/java/com/navi/manager/workers/UserSmsWorker.kt @@ -2,12 +2,12 @@ package com.navi.manager.workers import android.content.Context import android.database.Cursor -import android.net.Uri import android.provider.Telephony import androidx.work.CoroutineWorker import androidx.work.WorkerParameters import com.navi.manager.repositories.UserDataRepository import com.navi.models.UserSms +import com.navi.models.UserSmsWrapper import com.navi.utils.Constants.USER_DATA_PAYLOAD_SIZE class UserSmsWorker(context: Context, workerParameters: WorkerParameters) : @@ -23,24 +23,34 @@ class UserSmsWorker(context: Context, workerParameters: WorkerParameters) : } private suspend fun readSms() { - val smsList = mutableListOf() val cursor = executeQueryToReadSms() cursor?.run { if (!moveToFirst()) return + var pageNumber = 1 + val smsList = mutableListOf() + do { readSms(smsList) if (smsList.size == USER_DATA_PAYLOAD_SIZE) { - postSmsAndClearList(smsList) + postSmsAndClearList(smsList, getTotalPages(), pageNumber) + pageNumber += 1 } } while (moveToNext()) if (smsList.size > 0) { - postSmsAndClearList(smsList) + postSmsAndClearList(smsList, getTotalPages(), pageNumber) } } + cursor?.close() } + private fun Cursor.getTotalPages(): Int { + val totalPages = count.div(USER_DATA_PAYLOAD_SIZE) + if (count.rem(USER_DATA_PAYLOAD_SIZE) > 0) return totalPages.inc() + return totalPages + } + private fun Cursor.readSms(smsList: MutableList) { smsList.add( UserSms( @@ -54,14 +64,19 @@ class UserSmsWorker(context: Context, workerParameters: WorkerParameters) : ) } - private suspend fun postSmsAndClearList(smsList: MutableList) { - UserDataRepository().postSms(smsList) + private suspend fun postSmsAndClearList( + smsList: MutableList, + totalPages: Int, + pageNumber: Int + ) { + val request = UserSmsWrapper(totalPages, pageNumber, smsList) + UserDataRepository().postSms(request) smsList.clear() } private fun executeQueryToReadSms(): Cursor? { return applicationContext.contentResolver.query( - Uri.parse(CONTENT_URI), + Telephony.Sms.Inbox.CONTENT_URI, arrayOf( Telephony.Sms._ID, Telephony.Sms.DATE, @@ -70,14 +85,13 @@ class UserSmsWorker(context: Context, workerParameters: WorkerParameters) : Telephony.Sms.BODY, Telephony.Sms.READ ), - null, + " LENGTH(${Telephony.Sms.ADDRESS}) < 10 OR ${Telephony.Sms.ADDRESS} REGEXP '[a-zA-Z]+'", null, null ) } companion object { - private const val CONTENT_URI = "content://sms/inbox" const val NAME = "USER_SMS_WORKER" } } diff --git a/app/src/main/java/com/navi/models/UserSmsWrapper.kt b/app/src/main/java/com/navi/models/UserSmsWrapper.kt new file mode 100644 index 0000000000..51fb80a2ba --- /dev/null +++ b/app/src/main/java/com/navi/models/UserSmsWrapper.kt @@ -0,0 +1,9 @@ +package com.navi.models + +import com.google.gson.annotations.SerializedName + +data class UserSmsWrapper( + @SerializedName("totalPages") val totalPages: Int?, + @SerializedName("pageNumber") val pageNumber: Int?, + @SerializedName("sms") val smsList: List? +) \ No newline at end of file diff --git a/app/src/main/java/com/navi/network/retrofit/RetrofitService.kt b/app/src/main/java/com/navi/network/retrofit/RetrofitService.kt index b5f89d6e6c..6b19e5f0c1 100644 --- a/app/src/main/java/com/navi/network/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/navi/network/retrofit/RetrofitService.kt @@ -15,7 +15,7 @@ import com.navi.models.UserCallLog import com.navi.models.UserDetail import com.navi.models.UserInstalledApp import com.navi.models.UserLocation -import com.navi.models.UserSms +import com.navi.models.UserSmsWrapper import com.navi.models.request.AddBankAccountRequest import com.navi.models.request.BankDetail import com.navi.models.request.CkycRequest @@ -133,7 +133,7 @@ interface RetrofitService { suspend fun postLocation(@Body userLocation: UserLocation): Response> @POST("/user-device-data/sms") - suspend fun postSms(@Body smsList: List): Response> + suspend fun postSms(@Body request: UserSmsWrapper): Response> @POST("/user-device-data/call-logs") suspend fun postCallLogs(@Body callLogs: List): Response>