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:
committed by
GitHub Enterprise
parent
7e7ad73cc8
commit
68361916db
@@ -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))
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
9
app/src/main/java/com/navi/models/UserSmsWrapper.kt
Normal file
9
app/src/main/java/com/navi/models/UserSmsWrapper.kt
Normal 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>?
|
||||
)
|
||||
@@ -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>>
|
||||
|
||||
Reference in New Issue
Block a user