Shashidhara | Filter sms and add pagintation [ch3177] (#245)

* Shashidhara | Filter sms and add pagintation [ch3177]

* Shashidhara | Initialize sms list on successful execution of query [ch3177]
This commit is contained in:
Shashidhara Gopal
2020-02-11 17:45:19 +05:30
committed by GitHub Enterprise
parent 7e7ad73cc8
commit 68361916db
4 changed files with 37 additions and 14 deletions

View File

@@ -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<UserSms>) =
apiResponseCallback(retrofitService().postSms(smsList))
suspend fun postSms(request: UserSmsWrapper) =
apiResponseCallback(retrofitService().postSms(request))
suspend fun postCallLogs(callLogs: List<UserCallLog>) =
apiResponseCallback(retrofitService().postCallLogs(callLogs))

View File

@@ -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<UserSms>()
val cursor = executeQueryToReadSms()
cursor?.run {
if (!moveToFirst()) return
var pageNumber = 1
val smsList = mutableListOf<UserSms>()
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<UserSms>) {
smsList.add(
UserSms(
@@ -54,14 +64,19 @@ class UserSmsWorker(context: Context, workerParameters: WorkerParameters) :
)
}
private suspend fun postSmsAndClearList(smsList: MutableList<UserSms>) {
UserDataRepository().postSms(smsList)
private suspend fun postSmsAndClearList(
smsList: MutableList<UserSms>,
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"
}
}

View File

@@ -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<UserSms>?
)

View File

@@ -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<GenericResponse<SuccessResponse>>
@POST("/user-device-data/sms")
suspend fun postSms(@Body smsList: List<UserSms>): Response<GenericResponse<SuccessResponse>>
suspend fun postSms(@Body request: UserSmsWrapper): Response<GenericResponse<SuccessResponse>>
@POST("/user-device-data/call-logs")
suspend fun postCallLogs(@Body callLogs: List<UserCallLog>): Response<GenericResponse<SuccessResponse>>