From beda2037dee6002cd97726bbf6812df4b65b8fb0 Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Tue, 9 Apr 2024 19:05:06 +0530 Subject: [PATCH] =?UTF-8?q?TP-63255=20remove=20code=20related=20to=20uploa?= =?UTF-8?q?ding=20sms=20and=20contacts=20data=20in=20ba=E2=80=A6=20(#10389?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../naviapp/analytics/utils/NaviAnalytics.kt | 86 ------ .../java/com/naviapp/manager/WorkManager.kt | 65 ----- .../repositories/UserDataRepository.kt | 6 - .../manager/viewmodel/UserDataViewModel.kt | 27 +- .../manager/workers/UserContactWorker.kt | 35 --- .../naviapp/manager/workers/UserSmsWorker.kt | 35 --- .../network/retrofit/RetrofitService.kt | 20 -- .../main/java/com/naviapp/utils/Constants.kt | 1 - .../java/com/naviapp/utils/ContactsUtil.kt | 58 ---- .../src/main/java/com/naviapp/utils/Ext.kt | 8 - .../main/java/com/naviapp/utils/SmsUtil.kt | 93 ------- .../common/handler/UploadDataActionHandler.kt | 43 +-- .../common/ui/ApplicationPlatformActivity.kt | 3 - .../kotlin/com/navi/ap/di/ProviderModule.kt | 3 - .../com/navi/ap/utils/handler/UtilsHandler.kt | 13 - .../network/retrofit/RetrofitService.kt | 13 - .../common/permission/CommonContactsUtil.kt | 247 ------------------ .../navi/common/permission/CommonSmsUtil.kt | 111 -------- .../UiTronUploadDataDeserializer.kt | 3 - .../uitron/model/action/UploadDataAction.kt | 5 +- .../serializer/UiTronUploadDataSerializer.kt | 7 - .../repository/UserDataRepository.kt | 9 - .../navi/common/utils/CommonNaviAnalytics.kt | 198 -------------- .../java/com/navi/common/utils/Constants.kt | 1 - .../main/java/com/navi/common/utils/Ext.kt | 8 - .../src/main/res/values/strings.xml | 2 - .../main/res/xml/default_remote_config.xml | 4 - .../navi/insurance/network/ApiConstants.kt | 2 - .../main/java/com/navi/insurance/util/Ext.kt | 7 - .../src/main/AndroidManifest.xml | 5 - .../activity/NewLoanConsentActivity.kt | 158 ----------- 31 files changed, 3 insertions(+), 1273 deletions(-) delete mode 100644 android/app/src/main/java/com/naviapp/manager/WorkManager.kt delete mode 100644 android/app/src/main/java/com/naviapp/manager/workers/UserContactWorker.kt delete mode 100644 android/app/src/main/java/com/naviapp/manager/workers/UserSmsWorker.kt delete mode 100644 android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/handler/UtilsHandler.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/permission/CommonContactsUtil.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/permission/CommonSmsUtil.kt delete mode 100644 android/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/NewLoanConsentActivity.kt diff --git a/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt b/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt index 5fc3ff2c7a..ef640e81fd 100644 --- a/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt +++ b/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt @@ -4270,92 +4270,6 @@ class NaviAnalytics private constructor() { } } - inner class SmsUpload { - fun onSmsUploadStart(totalPages: Int, pageNumber: Int, size: Int, retryCount: Int = 0) { - NaviTrackEvent.trackEventOnClickStream( - eventName = - if (retryCount == 0) "sms_upload_started" else "retry_sms_upload_started", - eventValues = - mapOf( - "totalPages" to totalPages.toString(), - "pageNumber" to pageNumber.toString(), - "size" to size.toString() - ) - ) - } - - fun onSmsUploadSuccess(totalPages: Int, pageNumber: Int, size: Int, retryCount: Int = 0) { - NaviTrackEvent.trackEventOnClickStream( - eventName = - if (retryCount == 0) "sms_upload_success" else "retry_sms_upload_success", - eventValues = - mapOf( - "totalPages" to totalPages.toString(), - "pageNumber" to pageNumber.toString(), - "size" to size.toString() - ) - ) - } - - fun onSmsUploadFailure(totalPages: Int, pageNumber: Int, size: Int, statusCode: Int?) { - NaviTrackEvent.trackEventOnClickStream( - eventName = "sms_upload_failure", - eventValues = - mapOf( - "totalPages" to totalPages.toString(), - "pageNumber" to pageNumber.toString(), - "size" to size.toString(), - "statusCode" to statusCode.toString() - ) - ) - } - - fun smsUploadStartTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - eventName = "sms_upload_start_time", - eventValues = - mapOf( - "atTimeStamp" to System.currentTimeMillis().toString(), - "pageNumber" to pageNumber.toString() - ) - ) - } - - fun smsUploadEndTime(pageNumber: Int, retryCount: Int = 0) { - NaviTrackEvent.trackEventOnClickStream( - eventName = - if (retryCount == 0) "sms_upload_end_time" else "retry_sms_upload_end_time", - eventValues = - mapOf( - "atTimeStamp" to System.currentTimeMillis().toString(), - "pageNumber" to pageNumber.toString() - ) - ) - } - - fun smsReadStartTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - eventName = "sms_read_start_time", - eventValues = - mapOf( - "atTimeStamp" to System.currentTimeMillis().toString(), - "pageNumber" to pageNumber.toString() - ) - ) - } - - fun smsReadEndTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - eventName = "sms_read_end_time", - eventValues = - mapOf( - "atTimeStamp" to System.currentTimeMillis().toString(), - "pageNumber" to pageNumber.toString() - ) - ) - } - } - inner class ContactUpload { fun onFoundEmptyContactsList() { NaviTrackEvent.trackEventOnClickStream(eventName = "PL_DEV_CONTACT_LIST_IS_EMPTY") diff --git a/android/app/src/main/java/com/naviapp/manager/WorkManager.kt b/android/app/src/main/java/com/naviapp/manager/WorkManager.kt deleted file mode 100644 index c66a15df3b..0000000000 --- a/android/app/src/main/java/com/naviapp/manager/WorkManager.kt +++ /dev/null @@ -1,65 +0,0 @@ -/* - * - * * Copyright © 2019 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.manager - -import com.navi.common.R as CommonR -import androidx.work.ExistingPeriodicWorkPolicy -import androidx.work.PeriodicWorkRequest -import androidx.work.WorkManager -import com.naviapp.R -import com.naviapp.app.NaviApplication -import com.naviapp.manager.workers.UserContactWorker -import com.naviapp.manager.workers.UserSmsWorker -import com.navi.common.utils.log -import kotlinx.coroutines.CoroutineExceptionHandler -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import java.lang.Exception - -class WorkManager { - companion object { - private var workerType: String? = null - private val exceptionHandler = CoroutineExceptionHandler { _, exception -> - when (workerType) { - UserContactWorker.NAME -> { - Exception(NaviApplication.instance.applicationContext.getString(CommonR.string.network_error_contact)).log() - } - UserSmsWorker.NAME -> { - Exception(NaviApplication.instance.applicationContext.getString(CommonR.string.network_error_sms)).log() - } - } - } - private val coroutineScope = CoroutineScope(Dispatchers.Default + exceptionHandler) - - fun setupRecurringWorkToReadUserData( - periodicWorkRequestBuilder: PeriodicWorkRequest.Builder, - workerName: String - ) { - workerType = workerName - coroutineScope.launch { - try { - WorkManager.getInstance().enqueueUniquePeriodicWork( - workerName, - ExistingPeriodicWorkPolicy.KEEP, - periodicWorkRequestBuilder.build() - ) - } catch (e: Exception) { - when (workerName) { - UserContactWorker.NAME -> { - Exception(NaviApplication.instance.applicationContext.getString(CommonR.string.network_error_contact)).log() - } - UserSmsWorker.NAME -> { - Exception(NaviApplication.instance.applicationContext.getString(CommonR.string.network_error_sms)).log() - } - } - } - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/manager/repositories/UserDataRepository.kt b/android/app/src/main/java/com/naviapp/manager/repositories/UserDataRepository.kt index 6be1d41538..51b941d988 100644 --- a/android/app/src/main/java/com/naviapp/manager/repositories/UserDataRepository.kt +++ b/android/app/src/main/java/com/naviapp/manager/repositories/UserDataRepository.kt @@ -29,12 +29,6 @@ class UserDataRepository : ResponseCallback() { suspend fun postInstalledApps(request: UserDataWrapper>) = apiResponseCallback(retrofitService().postInstalledApps(request)) - suspend fun postSms(request: UserDataWrapper>) = - apiResponseCallback(retrofitService().postSms(request)) - - suspend fun postContacts(request: UserDataWrapper>) = - apiResponseCallback(retrofitService().postContacts(request)) - suspend fun updateFcmToken(deviceDetail: DeviceDetail) = apiResponseCallback(retrofitService().updateFcmToken(deviceDetail)) diff --git a/android/app/src/main/java/com/naviapp/manager/viewmodel/UserDataViewModel.kt b/android/app/src/main/java/com/naviapp/manager/viewmodel/UserDataViewModel.kt index 43b5ebb168..7c6a1222fc 100644 --- a/android/app/src/main/java/com/naviapp/manager/viewmodel/UserDataViewModel.kt +++ b/android/app/src/main/java/com/naviapp/manager/viewmodel/UserDataViewModel.kt @@ -38,9 +38,6 @@ class UserDataViewModel(application: Application) : AndroidViewModel(application private val _userDataSent = MutableLiveData() val userDataSent: LiveData get() = _userDataSent - private val _userDataSentStatus = MutableLiveData() - val userDataSentStatus: LiveData - get() = _userDataSentStatus private val analyticsTracker: NaviAnalytics.UserData = NaviAnalytics.naviAnalytics.UserData() private var startingTimeStamp: Long = 0 private var durationEventFired: Boolean = false @@ -80,13 +77,9 @@ class UserDataViewModel(application: Application) : AndroidViewModel(application this.screenRefreshRate = screenRefreshRate viewModelScope.launch(Dispatchers.IO) { if (FirebaseRemoteConfigHelper.getBoolean(GiFirebaseRemoteConfigConstants.UPLOAD_SMS_TO_BACKEND) && uploadSmsBatchData) { - val smsTask = async { SmsUtil.readSms(getApplication()) } - val contactsTask = async { ContactsUtil.readContacts(getApplication()) } val deviceDetailsTask = async { sendDeviceDetails(screenRefreshRate) } - smsTask.await() - contactsTask.await() deviceDetailsTask.await() - Timber.d("SmsTask, ContactsTask and Device Details Task Done (in batches)") + Timber.d("Device Details Task Done (in batches)") analyticsTracker.onUserDataSent() if (!SmsUtil.isUserDataIngestionViaCdsEnabled()) { _userDataSent.postValue(true) @@ -108,24 +101,6 @@ class UserDataViewModel(application: Application) : AndroidViewModel(application } } - fun sendUserDataToAws( - uploadSms: Boolean = false, - uploadContacts: Boolean = false, - uploadAppUsedInfo: Boolean = false - ) { - viewModelScope.launch(Dispatchers.IO) { - SmsUtil.uploadAppData(this, uploadSms, uploadContacts, uploadAppUsedInfo) { - uploadingTime, - ingestionStatus -> - analyticsTracker.postDeviceDataUploadingTime(uploadingTime) - _userDataSentStatus.postValue(ingestionStatus) - } - _userDataSent.postValue(true) - Timber.d("SmsTask, ContactsTask and Device Details Task Done") - analyticsTracker.onUserDataSent() - } - } - private suspend fun sendDeviceDetails(screenRefreshRate: String?) { analyticsTracker.deviceDetailsStartTime() val context: Context = getApplication() diff --git a/android/app/src/main/java/com/naviapp/manager/workers/UserContactWorker.kt b/android/app/src/main/java/com/naviapp/manager/workers/UserContactWorker.kt deleted file mode 100644 index 56975cacd0..0000000000 --- a/android/app/src/main/java/com/naviapp/manager/workers/UserContactWorker.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * - * * Copyright © 2019 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.manager.workers - -import com.navi.common.R as CommonR -import android.content.Context -import androidx.work.CoroutineWorker -import androidx.work.WorkerParameters -import com.naviapp.R -import com.naviapp.app.NaviApplication -import com.naviapp.utils.ContactsUtil -import com.navi.common.utils.log - -class UserContactWorker(context: Context, workerParameters: WorkerParameters) : - CoroutineWorker(context, workerParameters) { - - override suspend fun doWork(): Result { - return try { - ContactsUtil.readContacts(applicationContext) - Result.success() - } catch (e: Exception) { - Exception(NaviApplication.instance.applicationContext.getString(CommonR.string.network_error_contact)).log() - Result.retry() - } - } - - companion object { - const val NAME = "USER_CONTACT_WORKER" - } -} diff --git a/android/app/src/main/java/com/naviapp/manager/workers/UserSmsWorker.kt b/android/app/src/main/java/com/naviapp/manager/workers/UserSmsWorker.kt deleted file mode 100644 index e9e79dc3d7..0000000000 --- a/android/app/src/main/java/com/naviapp/manager/workers/UserSmsWorker.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * - * * Copyright © 2019 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.manager.workers - -import com.navi.common.R as CommonR -import android.content.Context -import androidx.work.CoroutineWorker -import androidx.work.WorkerParameters -import com.naviapp.R -import com.naviapp.app.NaviApplication -import com.naviapp.utils.SmsUtil -import com.navi.common.utils.log - -class UserSmsWorker(context: Context, workerParameters: WorkerParameters) : - CoroutineWorker(context, workerParameters) { - - override suspend fun doWork(): Result { - return try { - SmsUtil.readSms(applicationContext) - Result.success() - } catch (e: Exception) { - Exception(NaviApplication.instance.applicationContext.getString(CommonR.string.network_error_sms)).log() - Result.retry() - } - } - - companion object { - const val NAME = "USER_SMS_WORKER" - } -} diff --git a/android/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt b/android/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt index 19b2954178..575504e798 100644 --- a/android/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt +++ b/android/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt @@ -10,14 +10,12 @@ package com.naviapp.network.retrofit import com.google.common.net.HttpHeaders.ACCEPT_ENCODING import com.navi.amc.fundbuy.models.FundListResponse import com.navi.amc.utils.Constant -import com.navi.analytics.model.UserLocation import com.navi.base.model.ActionData import com.navi.base.model.CtaData import com.navi.base.model.DropOffInfo import com.navi.base.utils.EXCLUDE_FROM_HASH_ENCRYPTION import com.navi.base.utils.SKIP_LOADER import com.navi.base.utils.USER_DEVICE_DATA_APP_API -import com.navi.base.utils.USER_DEVICE_DATA_LOCATION_API import com.navi.common.account_aggregator.models.AccountAggregatorRequest import com.navi.common.account_aggregator.models.AccountAggregatorResponse import com.navi.common.model.AsyncRequestData @@ -34,7 +32,6 @@ import com.navi.common.model.ProfileResponse import com.navi.common.model.UploadDataAsyncResponse import com.navi.common.model.UserDataWrapper import com.navi.common.model.UserDetail -import com.navi.common.model.UserSms import com.navi.common.model.common.WidgetResponse import com.navi.common.network.models.GenericResponse import com.navi.common.useruploaddata.model.IngestionStatusBody @@ -346,23 +343,6 @@ interface RetrofitService { @Tag excludeFromHashEncryption: String = EXCLUDE_FROM_HASH_ENCRYPTION ): Response> - @POST(USER_DEVICE_DATA_LOCATION_API) - suspend fun postLocation( - @Body userLocation: UserLocation - ): Response> - - @POST("/user-device-data/sms") - suspend fun postSms( - @Body request: UserDataWrapper>, - @Tag excludeFromHashEncryption: String = EXCLUDE_FROM_HASH_ENCRYPTION - ): Response> - - @POST("/user-device-data/contacts") - suspend fun postContacts( - @Body request: UserDataWrapper>, - @Tag excludeFromHashEncryption: String = EXCLUDE_FROM_HASH_ENCRYPTION - ): Response> - @GET("/requests/{requestId}/status") suspend fun fetchAsyncRequestData( @Path("requestId") requestId: String diff --git a/android/app/src/main/java/com/naviapp/utils/Constants.kt b/android/app/src/main/java/com/naviapp/utils/Constants.kt index 88f738c5d6..782b9eb253 100644 --- a/android/app/src/main/java/com/naviapp/utils/Constants.kt +++ b/android/app/src/main/java/com/naviapp/utils/Constants.kt @@ -17,7 +17,6 @@ object Constants { const val EMPTY = "" const val HASH = "#" const val PACKAGE = "package:" - const val USER_DATA_PAYLOAD_SIZE = 1000 const val DATA = "data" const val ONE_SECOND = 1000L const val CHECK_PRE_ELIGIBILITY_START_TIME = "check_pre_eligibility_start_time" diff --git a/android/app/src/main/java/com/naviapp/utils/ContactsUtil.kt b/android/app/src/main/java/com/naviapp/utils/ContactsUtil.kt index 394fbfef77..21bac061db 100644 --- a/android/app/src/main/java/com/naviapp/utils/ContactsUtil.kt +++ b/android/app/src/main/java/com/naviapp/utils/ContactsUtil.kt @@ -42,36 +42,6 @@ object ContactsUtil { private val userDataZippingAnalyticsTracker = CommonNaviAnalytics.naviAnalytics.UserDataZipping() - suspend fun readContacts(applicationContext: Context) { - try { - val cursor = executeQueryToReadContacts(applicationContext) - - cursor?.run { - if (!moveToFirst()) return - var pageNumber = 1 - val contacts = mutableListOf() - analyticsTrackerContactUpload.contactReadStartTime(pageNumber) - do { - readContact(contacts) - if (contacts.size == Constants.USER_DATA_PAYLOAD_SIZE) { - analyticsTrackerContactUpload.contactReadEndTime(pageNumber) - postContactsAndClearList(contacts, getTotalPages(), pageNumber) - pageNumber += 1 - analyticsTrackerContactUpload.contactReadStartTime(pageNumber) - } - } while (moveToNext()) - if (contacts.size > 0) { - analyticsTrackerContactUpload.contactReadEndTime(pageNumber) - postContactsAndClearList(contacts, getTotalPages(), pageNumber) - } - } - - cursor?.close() - } catch (e: Exception) { - e.log() - } - } - private fun Cursor.readContact(contacts: MutableList) { val userPhone = UserPhone(getString(3), getString(4), getString(5)) val index = contacts.indexOfFirst { it.id == getString(0) } @@ -91,34 +61,6 @@ object ContactsUtil { ) } - private suspend fun postContactsAndClearList( - contacts: MutableList, - totalPages: Int, - pageNumber: Int - ) { - analyticsTrackerContactUpload.contactUploadStartTime(pageNumber) - val request = UserDataWrapper(totalPages, pageNumber, contacts) - analyticsTrackerContactUpload.onContactUploadStart(totalPages, pageNumber, contacts.size) - val response = UserDataRepository().postContacts(request) - analyticsTrackerContactUpload.contactUploadEndTime(pageNumber) - response.error?.let { - Exception( - NaviApplication.instance.applicationContext.getString( - CommonR.string.network_error_contact - ) + UNDERSCORE + it.statusCode - ) - .log() - analyticsTrackerContactUpload.onContactUploadFailure( - totalPages, - pageNumber, - contacts.size, - it.statusCode - ) - } - contacts.clear() - analyticsTrackerContactUpload.onContactUploadSuccess(totalPages, pageNumber, contacts.size) - } - suspend fun readZipAndUploadContacts( context: Context, url: String, diff --git a/android/app/src/main/java/com/naviapp/utils/Ext.kt b/android/app/src/main/java/com/naviapp/utils/Ext.kt index 009517dfe1..417d4424fe 100644 --- a/android/app/src/main/java/com/naviapp/utils/Ext.kt +++ b/android/app/src/main/java/com/naviapp/utils/Ext.kt @@ -11,7 +11,6 @@ import android.animation.Animator import android.app.Activity import android.content.Context import android.content.Intent -import android.database.Cursor import android.graphics.* import android.net.Uri import android.os.Bundle @@ -74,7 +73,6 @@ import com.naviapp.network.retrofit.RetrofitService import com.naviapp.payment.models.Amount import com.naviapp.superapp.NaviSuperAppRetrofitProvider import com.naviapp.utils.Constants.INR -import com.naviapp.utils.Constants.USER_DATA_PAYLOAD_SIZE import java.text.DecimalFormat import org.joda.time.LocalDate import org.json.JSONObject @@ -518,12 +516,6 @@ fun View.setPadding(padding: Padding?) { } } -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 -} - fun String?.maskText(unmaskedCharLength: Int = 4): String { var maskedText = "" this?.forEachIndexed { index, char -> diff --git a/android/app/src/main/java/com/naviapp/utils/SmsUtil.kt b/android/app/src/main/java/com/naviapp/utils/SmsUtil.kt index 530a884acb..948e8386e8 100644 --- a/android/app/src/main/java/com/naviapp/utils/SmsUtil.kt +++ b/android/app/src/main/java/com/naviapp/utils/SmsUtil.kt @@ -7,7 +7,6 @@ package com.naviapp.utils -import com.navi.common.R as CommonR import android.Manifest import android.content.Context import android.database.Cursor @@ -21,7 +20,6 @@ import com.navi.base.utils.orFalse import com.navi.base.utils.orZero import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper import com.navi.common.model.UploadDataAsyncResponse -import com.navi.common.model.UserDataWrapper import com.navi.common.model.UserSms import com.navi.common.model.UserSmsData import com.navi.common.useruploaddata.model.IngestionStatus @@ -33,7 +31,6 @@ import com.navi.common.useruploaddata.utils.UploadDataPollingUtil import com.navi.common.useruploaddata.utils.getSmsDataProjection import com.navi.common.useruploaddata.utils.getUserSmsFromCursorData import com.navi.common.utils.CommonNaviAnalytics -import com.navi.common.utils.Constants.UNDERSCORE import com.navi.common.utils.gzipCompress import com.navi.common.utils.isValidResponse import com.navi.common.utils.log @@ -63,8 +60,6 @@ import okhttp3.RequestBody import retrofit2.Response object SmsUtil { - private val analyticsTrackerSmsUpload: NaviAnalytics.SmsUpload = - NaviAnalytics.naviAnalytics.SmsUpload() private val analyticsTracker: NaviAnalytics.UserData = NaviAnalytics.naviAnalytics.UserData() private val userDataZippingAnalyticsTracker = CommonNaviAnalytics.naviAnalytics.UserDataZipping() @@ -73,98 +68,10 @@ object SmsUtil { private const val TIME_TO_UPLOAD_WHEN_EXCEPTION = -1L private const val DEFAULT_RETRIES_FOR_DATA_INGESTION = 3 - suspend fun readSms(applicationContext: Context) { - try { - val cursor = executeQueryToReadSms(applicationContext) - cursor?.run { - if (!moveToFirst()) return - var pageNumber = 1 - val smsList = mutableListOf() - analyticsTrackerSmsUpload.smsReadStartTime(pageNumber) - do { - readSms(smsList) - if (smsList.size == Constants.USER_DATA_PAYLOAD_SIZE) { - analyticsTrackerSmsUpload.smsReadEndTime(pageNumber) - postSmsAndClearList(smsList, getTotalPages(), pageNumber) - pageNumber += 1 - analyticsTrackerSmsUpload.smsReadStartTime(pageNumber) - } - } while (moveToNext()) - if (smsList.size > 0) { - analyticsTrackerSmsUpload.smsReadEndTime(pageNumber) - postSmsAndClearList(smsList, getTotalPages(), pageNumber) - } - } - - cursor?.close() - } catch (e: Exception) { - e.log() - } - } - private fun Cursor.readSms(smsList: MutableList) { smsList.add(getUserSmsFromCursorData()) } - private suspend fun postSmsAndClearList( - smsList: MutableList, - totalPages: Int, - pageNumber: Int, - retryCount: Int = 0 - ) { - analyticsTrackerSmsUpload.smsUploadStartTime(pageNumber) - val request = UserDataWrapper(totalPages, pageNumber, smsList) - analyticsTrackerSmsUpload.onSmsUploadStart(totalPages, pageNumber, smsList.size, retryCount) - val response = UserDataRepository().postSms(request) - analyticsTrackerSmsUpload.smsUploadEndTime(pageNumber, retryCount) - response.error?.let { - Exception( - NaviApplication.instance.applicationContext.getString( - CommonR.string.network_error_installed_app - ) + UNDERSCORE + it.statusCode - ) - .log() - analyticsTrackerSmsUpload.onSmsUploadFailure( - totalPages, - pageNumber, - smsList.size, - it.statusCode, - ) - if ( - retryCount < - FirebaseRemoteConfigHelper.getLong( - FirebaseRemoteConfigHelper.RETRY_COUNT_OF_SMS_INGESTION - ) - ) { - postSmsAndClearList(smsList, totalPages, pageNumber, retryCount = retryCount + 1) - return - } - } - ?: run { - smsList.clear() - analyticsTrackerSmsUpload.onSmsUploadSuccess( - totalPages, - pageNumber, - smsList.size, - retryCount - ) - } - } - - private fun executeQueryToReadSms(applicationContext: Context): Cursor? { - return if (hasPermissions(applicationContext, arrayOf(Manifest.permission.READ_SMS))) { - applicationContext.contentResolver.query( - Telephony.Sms.Inbox.CONTENT_URI, - getSmsDataProjection(), - " LENGTH(${Telephony.Sms.ADDRESS}) < 10 OR ${Telephony.Sms.ADDRESS} REGEXP '[a-zA-Z]+'", - null, - null - ) - } else { - null - } - } - private fun executeQueryToReadAllSms(applicationContext: Context): Cursor? { return if (hasPermissions(applicationContext, arrayOf(Manifest.permission.READ_SMS))) { applicationContext.contentResolver.query( diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/handler/UploadDataActionHandler.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/handler/UploadDataActionHandler.kt index 272074e110..6853f62234 100644 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/handler/UploadDataActionHandler.kt +++ b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/handler/UploadDataActionHandler.kt @@ -10,13 +10,10 @@ package com.navi.ap.common.handler import android.content.Context import androidx.compose.runtime.* import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.viewModelScope import com.navi.ap.common.ui.ApplicationPlatformActivity import com.navi.base.utils.orFalse import com.navi.base.utils.orZero -import com.navi.common.CommonLibManager import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper -import com.navi.common.permission.CommonContactsUtil import com.navi.common.ui.activity.BaseActivity import com.navi.common.uitron.model.action.UploadDataAction import com.navi.common.uitron.model.action.UploadDeviceDataType @@ -30,10 +27,8 @@ import com.navi.common.utils.getDeviceDetails import com.navi.common.utils.getScreenRefreshRate import com.navi.uitron.viewmodel.UiTronViewModel import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.async import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch -import timber.log.Timber @Composable fun HandleUploadDataAction( @@ -48,8 +43,6 @@ fun HandleUploadDataAction( val uploadedDataToS3 = remember { mutableStateOf(false) } val needToUploadDeviceDataToS3 = remember { mutableStateOf(true) } val uploadedDeviceData = remember { mutableStateOf(false) } - val needToUploadBatchesDataToS3 = remember { mutableStateOf(true) } - val uploadedBatchesData = remember { mutableStateOf(false) } DisposableEffect(Unit) { onDispose { action.value = UploadDataAction() } } @@ -112,12 +105,6 @@ fun HandleUploadDataAction( it?.uploadType == UploadDeviceDataType.UploadDeviceData.name } - val uploadSmsContactsBatchData: Boolean = - data.any { - it?.uploadType == - UploadDeviceDataType.UploadSmsContactsBatchData.name - } - val businessVertical: String? = data.firstOrNull()?.businessVertical val screenName: String = data.firstOrNull()?.screenName.orEmpty() val numberOfRetriesLeft: Int = data.firstOrNull()?.numberOfRetries.orZero() @@ -125,30 +112,6 @@ fun HandleUploadDataAction( needToUploadDataToS3.value = uploadSmsToS3 || uploadContactsToS3 || uploadAppsDataToS3 needToUploadDeviceDataToS3.value = uploadDeviceData - needToUploadBatchesDataToS3.value = uploadSmsContactsBatchData - - if (uploadSmsContactsBatchData) { - viewModel.viewModelScope.launch(Dispatchers.IO) { - val smsTask = async { - activity.utilsHandler.commonSmsUtil.readSms( - CommonLibManager.application, - eventMap - ) - } - val contactsTask = async { - CommonContactsUtil.readContacts( - CommonLibManager.application, - eventMap - ) - } - smsTask.await() - contactsTask.await() - Timber.d( - "SmsTask, ContactsTask and Device Details Task Done (in batches)" - ) - uploadedBatchesData.value = true - } - } if (uploadSmsToS3 || uploadContactsToS3 || uploadAppsDataToS3) { analyticsTracker.eventMap = eventMap @@ -226,8 +189,7 @@ fun HandleUploadDataAction( if ( (uploadedDataToS3.value || !needToUploadDataToS3.value) && - (uploadedDeviceData.value || !needToUploadDeviceDataToS3.value) && - (uploadedBatchesData.value || !needToUploadBatchesDataToS3.value) + (uploadedDeviceData.value || !needToUploadDeviceDataToS3.value) ) { needToUploadDataToS3.value = true uploadedDataToS3.value = false @@ -235,9 +197,6 @@ fun HandleUploadDataAction( needToUploadDeviceDataToS3.value = true uploadedDeviceData.value = false - needToUploadBatchesDataToS3.value = true - uploadedBatchesData.value = false - analyticsTracker.onDataUploadSuccess() viewModel.handleActions(action.value.onSuccess) } diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/ui/ApplicationPlatformActivity.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/ui/ApplicationPlatformActivity.kt index aa74844dcb..9b8445e9f4 100644 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/ui/ApplicationPlatformActivity.kt +++ b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/ui/ApplicationPlatformActivity.kt @@ -25,7 +25,6 @@ import com.navi.ap.common.viewmodel.ApplicationPlatformVM import com.navi.ap.navigator.Navigator import com.navi.ap.utils.constants.COINS import com.navi.ap.utils.constants.FINORAMIC_USER_ID -import com.navi.ap.utils.handler.UtilsHandler import com.navi.base.utils.EMPTY import com.navi.common.model.ModuleNameV2 import com.navi.common.utils.Constants.APP_PLATFORM_APPLICATION_TYPE @@ -40,8 +39,6 @@ open class ApplicationPlatformActivity : SdkHandlingActivity() { @Inject lateinit var navigator: Navigator - @Inject lateinit var utilsHandler: UtilsHandler - private val apSharedVM by viewModels() lateinit var navController: NavHostController diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/di/ProviderModule.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/di/ProviderModule.kt index c113fc2054..42204dbb09 100644 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/di/ProviderModule.kt +++ b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/di/ProviderModule.kt @@ -10,7 +10,6 @@ package com.navi.ap.di import android.app.DownloadManager import android.content.Context import android.content.Context.DOWNLOAD_SERVICE -import com.navi.common.permission.CommonSmsUtil import com.navi.payment.razorpay.RazorpayHelper import dagger.Module import dagger.Provides @@ -28,6 +27,4 @@ object ProviderModule { } @Provides fun getRazorPayHelper(): RazorpayHelper = RazorpayHelper() - - @Provides fun getCommonSmsUtil(): CommonSmsUtil = CommonSmsUtil() } diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/handler/UtilsHandler.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/handler/UtilsHandler.kt deleted file mode 100644 index f41b111b79..0000000000 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/handler/UtilsHandler.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * - * * Copyright © 2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.navi.ap.utils.handler - -import com.navi.common.permission.CommonSmsUtil -import javax.inject.Inject - -class UtilsHandler @Inject constructor(val commonSmsUtil: CommonSmsUtil) diff --git a/android/navi-common/src/main/java/com/navi/common/network/retrofit/RetrofitService.kt b/android/navi-common/src/main/java/com/navi/common/network/retrofit/RetrofitService.kt index ba52bb1cb0..897f38c709 100644 --- a/android/navi-common/src/main/java/com/navi/common/network/retrofit/RetrofitService.kt +++ b/android/navi-common/src/main/java/com/navi/common/network/retrofit/RetrofitService.kt @@ -32,7 +32,6 @@ import com.navi.common.permission.UpdateDevicePermissionsRequest import com.navi.common.useruploaddata.model.DataIngestionUploadResponse import com.navi.common.useruploaddata.model.IngestionStatusBody import com.navi.common.useruploaddata.model.PreSignedUrlListResponse -import com.navi.common.useruploaddata.model.UserContact import com.navi.vkyc.models.PermissionDetailsResponse import okhttp3.MultipartBody import okhttp3.RequestBody @@ -226,18 +225,6 @@ interface RetrofitService { @Body data: NetPromoterScoreRequest ): Response> - @POST("/user-device-data/sms") - suspend fun postSms( - @Body request: UserDataWrapper>, - @Header("X-Target") header: String - ): Response> - - @POST("/user-device-data/contacts") - suspend fun postContacts( - @Body request: UserDataWrapper>, - @Header("X-Target") header: String - ): Response> - @GET("/financial-profile/account-aggregator/finarkein/session") suspend fun fetchFinarkeinAuthToken( @Header("X-Target") target: String diff --git a/android/navi-common/src/main/java/com/navi/common/permission/CommonContactsUtil.kt b/android/navi-common/src/main/java/com/navi/common/permission/CommonContactsUtil.kt deleted file mode 100644 index 872b5b3572..0000000000 --- a/android/navi-common/src/main/java/com/navi/common/permission/CommonContactsUtil.kt +++ /dev/null @@ -1,247 +0,0 @@ -/* - * - * * Copyright © 2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.navi.common.permission - -import android.content.Context -import android.database.Cursor -import android.net.Uri -import android.provider.ContactsContract -import android.util.Base64 -import com.google.gson.Gson -import com.navi.base.utils.orFalse -import com.navi.common.managers.PermissionsManager -import com.navi.common.model.UserDataWrapper -import com.navi.common.network.ApiConstants.MIME_TYPE_TEXT_PLAIN -import com.navi.common.useruploaddata.model.ContactData -import com.navi.common.useruploaddata.model.IngestionStatus -import com.navi.common.useruploaddata.model.IngestionStatusType -import com.navi.common.useruploaddata.model.IngestionType -import com.navi.common.useruploaddata.model.UserContact -import com.navi.common.useruploaddata.model.UserPhone -import com.navi.common.useruploaddata.repository.UserDataRepository -import com.navi.common.useruploaddata.utils.PermissionUtil.hasPermissions -import com.navi.common.utils.CommonNaviAnalytics -import com.navi.common.utils.Constants -import com.navi.common.utils.Constants.QUESTION_MARK -import com.navi.common.utils.Constants.UNDERSCORE -import com.navi.common.utils.getTotalPages -import com.navi.common.utils.gzipCompress -import com.navi.common.utils.log -import okhttp3.MediaType.Companion.toMediaTypeOrNull -import okhttp3.RequestBody -import retrofit2.Response - -object CommonContactsUtil { - - private val analyticsTracker = CommonNaviAnalytics.naviAnalytics.CommonContactsUtil() - private val userDataZippingAnalyticsTracker = - CommonNaviAnalytics.naviAnalytics.UserDataZipping() - - suspend fun readContacts(applicationContext: Context, eventMap: Map = mapOf()) { - try { - analyticsTracker.eventMap = eventMap - val cursor = executeQueryToReadContacts(applicationContext) - - cursor?.run { - if (!moveToFirst()) return - var pageNumber = 1 - val contacts = mutableListOf() - analyticsTracker.contactReadStartTime(pageNumber) - do { - readContact(contacts) - if (contacts.size == Constants.USER_DATA_PAYLOAD_SIZE) { - analyticsTracker.contactReadEndTime(pageNumber) - postContactsAndClearList(contacts, getTotalPages(), pageNumber) - pageNumber += 1 - analyticsTracker.contactReadStartTime(pageNumber) - } - } while (moveToNext()) - if (contacts.size > 0) { - analyticsTracker.contactReadEndTime(pageNumber) - postContactsAndClearList(contacts, getTotalPages(), pageNumber) - } - } - - cursor?.close() - } catch (e: Exception) { - e.log() - } - } - - private fun Cursor.readContact(contacts: MutableList) { - val userPhone = UserPhone(getString(3), getString(4), getString(5)) - val index = contacts.indexOfFirst { it.id == getString(0) } - - if (index >= 0) { - contacts[index].phones?.add(userPhone) - return - } - - contacts.add( - UserContact( - getString(0), // Phone CONTACT_ID column - getString(1), // Phone DISPLAY_NAME column - getInt(2), // Phone STARRED column - mutableListOf(userPhone) - ) - ) - } - - private suspend fun postContactsAndClearList( - contacts: MutableList, - totalPages: Int, - pageNumber: Int - ) { - analyticsTracker.contactUploadStartTime(pageNumber) - val request = UserDataWrapper(totalPages, pageNumber, contacts) - analyticsTracker.onContactUploadStart(totalPages, pageNumber, contacts.size) - val response = UserDataRepository().postContacts(request) - analyticsTracker.contactUploadEndTime(pageNumber) - response.error?.let { - Exception("Contact Upload Issue" + UNDERSCORE + it.statusCode).log() - analyticsTracker.onContactUploadFailure( - totalPages, - pageNumber, - contacts.size, - it.statusCode - ) - } - contacts.clear() - analyticsTracker.onContactUploadSuccess(totalPages, pageNumber, contacts.size) - } - - suspend fun readZipAndUploadContacts( - context: Context, - url: String, - referenceId: String - ): IngestionStatus? { - return try { - userDataZippingAnalyticsTracker.onZippingInitiated(type = IngestionType.CONTACTS.name) - val cursor = executeQueryToReadContacts(context) - val contactList = mutableListOf() - val pageNumber = 1 - cursor?.apply { - analyticsTracker.contactReadStartTime(pageNumber) - if (!moveToFirst()) return null - do readContact(contactList) while (moveToNext()) - close() - if (contactList.size > 0) { - analyticsTracker.contactReadEndTime(pageNumber) - } else if (contactList.isEmpty()) { - analyticsTracker.onFoundEmptyContactsList() - } - } - val contactData = ContactData(contactList) - userDataZippingAnalyticsTracker.onZippingSuccess( - type = IngestionType.CONTACTS.name, - size = contactData.contactDetailsList?.size - ) - postZippedContacts(contactData, url, referenceId, pageNumber = pageNumber) - } catch (e: Exception) { - e.log() - userDataZippingAnalyticsTracker.onZippingFailure( - type = IngestionType.CONTACTS.name, - message = e.message, - stacktrace = e.stackTraceToString() - ) - IngestionStatus( - referenceId = referenceId, - ingestionType = IngestionType.CONTACTS, - status = IngestionStatusType.FAILED - ) - } - } - - private suspend fun postZippedContacts( - contactData: ContactData, - url: String, - referenceId: String, - pageNumber: Int - ): IngestionStatus { - analyticsTracker.contactUploadStartTime(pageNumber) - val gson = Gson().toJson(contactData) - userDataZippingAnalyticsTracker.onZippingUploadInitiated( - type = IngestionType.CONTACTS.name, - size = contactData.contactDetailsList?.size - ) - val response = postZippedData(gson, url) - analyticsTracker.contactUploadEndTime(pageNumber) - val ingestionStatus = - IngestionStatus( - referenceId = referenceId, - ingestionType = IngestionType.CONTACTS, - ) - if (response?.isSuccessful.orFalse()) { - analyticsTracker.onContactUploadSuccess() - userDataZippingAnalyticsTracker.onZippingUploadSuccess( - type = IngestionType.CONTACTS.name, - size = contactData.contactDetailsList?.size - ) - ingestionStatus.status = IngestionStatusType.SUCCESS - } else { - analyticsTracker.onContactUploadFailureEvent() - userDataZippingAnalyticsTracker.onZippingUploadFailure( - type = IngestionType.CONTACTS.name, - size = contactData.contactDetailsList?.size, - message = response?.message(), - responseCode = response?.code() - ) - ingestionStatus.status = IngestionStatusType.FAILED - } - return ingestionStatus - } - - private suspend fun postZippedData( - gsonString: String, - url: String, - ): Response? { - val zippedData = gsonString.gzipCompress() - val encodedData = Base64.encodeToString(zippedData, Base64.NO_WRAP) - val requestBody: RequestBody = - RequestBody.create(MIME_TYPE_TEXT_PLAIN.toMediaTypeOrNull(), encodedData) - val uri = Uri.parse(url) - - val indexOfQuestionMark = url.indexOf(QUESTION_MARK) - val baseUrl = url.subSequence(0, indexOfQuestionMark) - val queryMap = mutableMapOf() - - for (paramKey in uri.queryParameterNames) { - val paramValue = uri.getQueryParameter(paramKey) - if (paramKey != null && paramValue != null) { - queryMap[paramKey] = paramValue - } - } - - return UserDataRepository() - .postZippedMessage( - url = baseUrl.toString(), - queryMap = queryMap, - requestBody = requestBody - ) - } - - private fun executeQueryToReadContacts(applicationContext: Context): Cursor? { - if (hasPermissions(applicationContext, arrayOf(PermissionsManager.READ_CONTACTS))) { - return applicationContext.contentResolver.query( - ContactsContract.CommonDataKinds.Phone.CONTENT_URI, - arrayOf( - ContactsContract.CommonDataKinds.Phone.CONTACT_ID, - ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, - ContactsContract.CommonDataKinds.Phone.STARRED, - ContactsContract.CommonDataKinds.Phone.NUMBER, - ContactsContract.CommonDataKinds.Phone.TYPE, - ContactsContract.CommonDataKinds.Phone.LABEL - ), - null, - null, - null - ) - } - return null - } -} diff --git a/android/navi-common/src/main/java/com/navi/common/permission/CommonSmsUtil.kt b/android/navi-common/src/main/java/com/navi/common/permission/CommonSmsUtil.kt deleted file mode 100644 index 4e7db6b93a..0000000000 --- a/android/navi-common/src/main/java/com/navi/common/permission/CommonSmsUtil.kt +++ /dev/null @@ -1,111 +0,0 @@ -/* - * - * * Copyright © 2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.navi.common.permission - -import android.Manifest -import android.content.Context -import android.database.Cursor -import android.provider.Telephony -import com.navi.common.model.UserDataWrapper -import com.navi.common.model.UserSms -import com.navi.common.useruploaddata.repository.UserDataRepository -import com.navi.common.useruploaddata.utils.PermissionUtil.hasPermissions -import com.navi.common.useruploaddata.utils.getSmsDataProjection -import com.navi.common.useruploaddata.utils.getUserSmsFromCursorData -import com.navi.common.utils.CommonNaviAnalytics -import com.navi.common.utils.Constants -import com.navi.common.utils.getTotalPages -import com.navi.common.utils.log - -class CommonSmsUtil { - - private val analyticsTracker = CommonNaviAnalytics.naviAnalytics.CommonSmsUtil() - - suspend fun readSms(applicationContext: Context, eventMap: Map = mapOf()) { - try { - analyticsTracker.eventMap = eventMap - val cursor = executeQueryToReadSms(applicationContext) - cursor?.run { - if (!moveToFirst()) return - var pageNumber = 1 - val smsList = mutableListOf() - analyticsTracker.smsReadStartTime(pageNumber) - do { - readSmsWithCursor(cursor = this, smsList = smsList) - if (smsList.size == Constants.USER_DATA_PAYLOAD_SIZE) { - analyticsTracker.smsReadEndTime(pageNumber) - postSmsAndClearList(smsList, getTotalPages(), pageNumber) - pageNumber += 1 - analyticsTracker.smsReadStartTime(pageNumber) - } - } while (moveToNext()) - if (smsList.size > 0) { - analyticsTracker.smsReadEndTime(pageNumber) - postSmsAndClearList(smsList, getTotalPages(), pageNumber) - } - } - - cursor?.close() - } catch (e: Exception) { - e.log() - } - } - - private fun readSmsWithCursor(cursor: Cursor, smsList: MutableList) { - smsList.add(cursor.getUserSmsFromCursorData()) - } - - private fun executeQueryToReadSms(applicationContext: Context): Cursor? { - return if (hasPermissions(applicationContext, arrayOf(Manifest.permission.READ_SMS))) { - applicationContext.contentResolver.query( - Telephony.Sms.Inbox.CONTENT_URI, - getSmsDataProjection(), - " LENGTH(${Telephony.Sms.ADDRESS}) < 10 OR ${Telephony.Sms.ADDRESS} REGEXP '[a-zA-Z]+'", - null, - null - ) - } else { - null - } - } - - private suspend fun postSmsAndClearList( - smsList: MutableList, - totalPages: Int, - pageNumber: Int, - retryCount: Int = 0 - ) { - analyticsTracker.smsUploadStartTime(pageNumber) - val request = UserDataWrapper(totalPages, pageNumber, smsList) - analyticsTracker.onSmsUploadStart(totalPages, pageNumber, smsList.size, retryCount) - val response = UserDataRepository().postSms(request) - analyticsTracker.smsUploadEndTime(pageNumber, retryCount) - response.error?.let { - Exception("Installed App Upload Issue" + Constants.UNDERSCORE + it.statusCode).log() - analyticsTracker.onSmsUploadFailure( - totalPages, - pageNumber, - smsList.size, - it.statusCode, - ) - if (retryCount < 1) { - postSmsAndClearList(smsList, totalPages, pageNumber, retryCount = retryCount + 1) - return - } - } - ?: run { - smsList.clear() - analyticsTracker.onSmsUploadSuccess( - totalPages, - pageNumber, - smsList.size, - retryCount - ) - } - } -} diff --git a/android/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronUploadDataDeserializer.kt b/android/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronUploadDataDeserializer.kt index 7eb8586cb7..f5a9c1bda7 100644 --- a/android/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronUploadDataDeserializer.kt +++ b/android/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronUploadDataDeserializer.kt @@ -16,7 +16,6 @@ import com.navi.common.uitron.model.action.UploadDataConfig import com.navi.common.uitron.model.action.UploadDeviceDataConfig import com.navi.common.uitron.model.action.UploadDeviceDataType import com.navi.common.uitron.model.action.UploadLocationDataConfig -import com.navi.common.uitron.model.action.UploadSmsContactsBatchDataConfig import com.navi.common.uitron.model.action.UploadSmsToFinoramicDataConfig import com.navi.common.uitron.model.action.UploadSmsToS3DataConfig import java.lang.reflect.Type @@ -43,8 +42,6 @@ class UiTronUploadDataDeserializer : JsonDeserializer { context?.deserialize(jsonObject, UploadDeviceDataConfig::class.java) UploadDeviceDataType.UploadLocationData.name -> context?.deserialize(jsonObject, UploadLocationDataConfig::class.java) - UploadDeviceDataType.UploadSmsContactsBatchData.name -> - context?.deserialize(jsonObject, UploadSmsContactsBatchDataConfig::class.java) else -> null } } diff --git a/android/navi-common/src/main/java/com/navi/common/uitron/model/action/UploadDataAction.kt b/android/navi-common/src/main/java/com/navi/common/uitron/model/action/UploadDataAction.kt index bc75c668bd..533eda237a 100644 --- a/android/navi-common/src/main/java/com/navi/common/uitron/model/action/UploadDataAction.kt +++ b/android/navi-common/src/main/java/com/navi/common/uitron/model/action/UploadDataAction.kt @@ -45,8 +45,6 @@ class UploadSmsToFinoramicDataConfig : UploadDataConfig() class UploadDeviceDataConfig : UploadDataConfig() -class UploadSmsContactsBatchDataConfig : UploadDataConfig() - class UploadLocationDataConfig(@SerializedName("eventName") val eventName: String? = null) : UploadDataConfig() @@ -56,6 +54,5 @@ enum class UploadDeviceDataType { UploadAppsDataToS3, UploadSmsToFinoramic, UploadDeviceData, - UploadLocationData, - UploadSmsContactsBatchData + UploadLocationData } diff --git a/android/navi-common/src/main/java/com/navi/common/uitron/serializer/UiTronUploadDataSerializer.kt b/android/navi-common/src/main/java/com/navi/common/uitron/serializer/UiTronUploadDataSerializer.kt index 3613da12c6..a101b173c9 100644 --- a/android/navi-common/src/main/java/com/navi/common/uitron/serializer/UiTronUploadDataSerializer.kt +++ b/android/navi-common/src/main/java/com/navi/common/uitron/serializer/UiTronUploadDataSerializer.kt @@ -17,7 +17,6 @@ import com.navi.common.uitron.model.action.UploadDataConfig import com.navi.common.uitron.model.action.UploadDeviceDataConfig import com.navi.common.uitron.model.action.UploadDeviceDataType import com.navi.common.uitron.model.action.UploadLocationDataConfig -import com.navi.common.uitron.model.action.UploadSmsContactsBatchDataConfig import com.navi.common.uitron.model.action.UploadSmsToFinoramicDataConfig import com.navi.common.uitron.model.action.UploadSmsToS3DataConfig import java.lang.reflect.Type @@ -65,12 +64,6 @@ open class UiTronUploadDataSerializer : JsonSerializer { UploadLocationDataConfig::class.java ) } - UploadDeviceDataType.UploadSmsContactsBatchData.name -> { - context?.serialize( - src as UploadSmsContactsBatchDataConfig, - UploadSmsContactsBatchDataConfig::class.java - ) - } else -> JsonPrimitive(src?.toString()) } } diff --git a/android/navi-common/src/main/java/com/navi/common/useruploaddata/repository/UserDataRepository.kt b/android/navi-common/src/main/java/com/navi/common/useruploaddata/repository/UserDataRepository.kt index 59d0612848..0c9fdb9909 100644 --- a/android/navi-common/src/main/java/com/navi/common/useruploaddata/repository/UserDataRepository.kt +++ b/android/navi-common/src/main/java/com/navi/common/useruploaddata/repository/UserDataRepository.kt @@ -10,11 +10,8 @@ package com.navi.common.useruploaddata.repository import com.navi.analytics.utils.NaviTrackEvent import com.navi.common.model.DeviceDetail import com.navi.common.model.ModuleName -import com.navi.common.model.UserDataWrapper -import com.navi.common.model.UserSms import com.navi.common.network.retrofit.ResponseCallback import com.navi.common.useruploaddata.model.IngestionStatusBody -import com.navi.common.useruploaddata.model.UserContact import com.navi.common.utils.retrofitService import okhttp3.RequestBody import retrofit2.Response @@ -69,10 +66,4 @@ class UserDataRepository : ResponseCallback() { retrofitService() .fetchAsyncRequestDataWithDataIngestionUploadPayload(ModuleName.LE.name, requestId) ) - - suspend fun postSms(request: UserDataWrapper>) = - apiResponseCallback(retrofitService().postSms(request, ModuleName.LE.name)) - - suspend fun postContacts(request: UserDataWrapper>) = - apiResponseCallback(retrofitService().postContacts(request, ModuleName.LE.name)) } diff --git a/android/navi-common/src/main/java/com/navi/common/utils/CommonNaviAnalytics.kt b/android/navi-common/src/main/java/com/navi/common/utils/CommonNaviAnalytics.kt index 78ea5abeb5..114c32aa1a 100644 --- a/android/navi-common/src/main/java/com/navi/common/utils/CommonNaviAnalytics.kt +++ b/android/navi-common/src/main/java/com/navi/common/utils/CommonNaviAnalytics.kt @@ -746,204 +746,6 @@ class CommonNaviAnalytics private constructor() { } } - inner class CommonContactsUtil { - - var eventMap = emptyMap() - - fun onFoundEmptyContactsList() { - NaviTrackEvent.trackEventOnClickStream("PL_DEV_CONTACT_LIST_IS_EMPTY", eventMap) - } - - fun onContactUploadStart(totalPages: Int, pageNumber: Int, size: Int) { - NaviTrackEvent.trackEventOnClickStream( - "contact_upload_started", - eventMap.plus( - mapOf( - Pair("totalPages", totalPages.toString()), - Pair("pageNumber", pageNumber.toString()), - Pair("size", size.toString()) - ) - ) - ) - } - - fun onContactUploadSuccess(totalPages: Int, pageNumber: Int, size: Int) { - NaviTrackEvent.trackEventOnClickStream( - "contact_upload_success", - eventMap.plus( - mapOf( - Pair("totalPages", totalPages.toString()), - Pair("pageNumber", pageNumber.toString()), - Pair("size", size.toString()) - ) - ) - ) - } - - fun onContactUploadSuccess() { - NaviTrackEvent.trackEventOnClickStream("pl_dev_contact_upload_success", eventMap) - } - - fun onContactUploadFailureEvent() { - NaviTrackEvent.trackEventOnClickStream("pl_dev_contact_upload_failure", eventMap) - } - - fun onContactUploadFailure(totalPages: Int, pageNumber: Int, size: Int, statusCode: Int?) { - NaviTrackEvent.trackEventOnClickStream( - "contact_upload_failure", - eventMap.plus( - mapOf( - Pair("totalPages", totalPages.toString()), - Pair("pageNumber", pageNumber.toString()), - Pair("size", size.toString()), - Pair("statusCode", statusCode.toString()) - ) - ) - ) - } - - fun contactUploadStartTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - "contact_number_upload_start_time", - eventMap.plus( - mapOf( - Pair("atTimeStamp", System.currentTimeMillis().toString()), - Pair("pageNumber", pageNumber.toString()) - ) - ) - ) - } - - fun contactUploadEndTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - "contact_number_upload_end_time", - eventMap.plus( - mapOf( - Pair("atTimeStamp", System.currentTimeMillis().toString()), - Pair("pageNumber", pageNumber.toString()) - ) - ) - ) - } - - fun contactReadStartTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - "contact_number_read_start_time", - eventMap.plus( - mapOf( - Pair("atTimeStamp", System.currentTimeMillis().toString()), - Pair("pageNumber", pageNumber.toString()) - ) - ) - ) - } - - fun contactReadEndTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - "contact_number_read_end_time", - eventMap.plus( - mapOf( - Pair("atTimeStamp", System.currentTimeMillis().toString()), - Pair("pageNumber", pageNumber.toString()) - ) - ) - ) - } - } - - inner class CommonSmsUtil { - - var eventMap = emptyMap() - - fun onSmsUploadStart(totalPages: Int, pageNumber: Int, size: Int, retryCount: Int = 0) { - NaviTrackEvent.trackEventOnClickStream( - if (retryCount == 0) "sms_upload_started" else "retry_sms_upload_started", - eventMap.plus( - mapOf( - Pair("totalPages", totalPages.toString()), - Pair("pageNumber", pageNumber.toString()), - Pair("size", size.toString()) - ) - ) - ) - } - - fun onSmsUploadSuccess(totalPages: Int, pageNumber: Int, size: Int, retryCount: Int = 0) { - NaviTrackEvent.trackEventOnClickStream( - if (retryCount == 0) "sms_upload_success" else "retry_sms_upload_success", - eventMap.plus( - mapOf( - Pair("totalPages", totalPages.toString()), - Pair("pageNumber", pageNumber.toString()), - Pair("size", size.toString()) - ) - ) - ) - } - - fun onSmsUploadFailure(totalPages: Int, pageNumber: Int, size: Int, statusCode: Int?) { - NaviTrackEvent.trackEventOnClickStream( - "sms_upload_failure", - eventMap.plus( - mapOf( - Pair("totalPages", totalPages.toString()), - Pair("pageNumber", pageNumber.toString()), - Pair("size", size.toString()), - Pair("statusCode", statusCode.toString()) - ) - ) - ) - } - - fun smsUploadStartTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - "sms_upload_start_time", - eventMap.plus( - mapOf( - Pair("atTimeStamp", System.currentTimeMillis().toString()), - Pair("pageNumber", pageNumber.toString()) - ) - ) - ) - } - - fun smsUploadEndTime(pageNumber: Int, retryCount: Int = 0) { - NaviTrackEvent.trackEventOnClickStream( - if (retryCount == 0) "sms_upload_end_time" else "retry_sms_upload_end_time", - eventMap.plus( - mapOf( - Pair("atTimeStamp", System.currentTimeMillis().toString()), - Pair("pageNumber", pageNumber.toString()) - ) - ) - ) - } - - fun smsReadStartTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - "sms_read_start_time", - eventMap.plus( - mapOf( - Pair("atTimeStamp", System.currentTimeMillis().toString()), - Pair("pageNumber", pageNumber.toString()) - ) - ) - ) - } - - fun smsReadEndTime(pageNumber: Int) { - NaviTrackEvent.trackEventOnClickStream( - "sms_read_end_time", - eventMap.plus( - mapOf( - Pair("atTimeStamp", System.currentTimeMillis().toString()), - Pair("pageNumber", pageNumber.toString()) - ) - ) - ) - } - } - inner class PermissionUtil { fun hasPermissions(hasPermissions: Boolean) { diff --git a/android/navi-common/src/main/java/com/navi/common/utils/Constants.kt b/android/navi-common/src/main/java/com/navi/common/utils/Constants.kt index 7d5e3e5cf4..871136eda4 100644 --- a/android/navi-common/src/main/java/com/navi/common/utils/Constants.kt +++ b/android/navi-common/src/main/java/com/navi/common/utils/Constants.kt @@ -201,7 +201,6 @@ object Constants { const val VISIBLE = "visible" const val HIDE = "hide" const val LOGOUT = "logout" - const val USER_DATA_PAYLOAD_SIZE = 1000 const val GZIP = "gzip" const val ASTERISK = "*" const val ADDITIONAL_PARAMETERS = "ADDITIONAL_PARAMETERS" diff --git a/android/navi-common/src/main/java/com/navi/common/utils/Ext.kt b/android/navi-common/src/main/java/com/navi/common/utils/Ext.kt index 39b82d7b4a..713e5b7a55 100644 --- a/android/navi-common/src/main/java/com/navi/common/utils/Ext.kt +++ b/android/navi-common/src/main/java/com/navi/common/utils/Ext.kt @@ -9,7 +9,6 @@ package com.navi.common.utils import android.app.Activity import android.content.Context -import android.database.Cursor import android.graphics.Color import android.graphics.Outline import android.graphics.drawable.GradientDrawable @@ -57,7 +56,6 @@ import com.navi.common.customview.CustomTypefaceSpan import com.navi.common.listeners.ClickableTextListener import com.navi.common.network.models.RepoResult import com.navi.common.network.retrofit.RetrofitService -import com.navi.common.utils.Constants.USER_DATA_PAYLOAD_SIZE import com.navi.design.font.FontWeightEnum import com.navi.design.utils.getFontStyle import com.navi.naviwidgets.extensions.getOrientation @@ -607,9 +605,3 @@ fun String.appendStrings(vararg string: String): String { } return result } - -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 -} diff --git a/android/navi-common/src/main/res/values/strings.xml b/android/navi-common/src/main/res/values/strings.xml index c999c62451..e941fcdd6f 100644 --- a/android/navi-common/src/main/res/values/strings.xml +++ b/android/navi-common/src/main/res/values/strings.xml @@ -42,8 +42,6 @@ Logout You are logging out from the app Confirm - Sms Upload Issue - Contact Upload Issue Installed App Upload Issue Location Upload Issue Location Call if Session Token null or empty diff --git a/android/navi-common/src/main/res/xml/default_remote_config.xml b/android/navi-common/src/main/res/xml/default_remote_config.xml index 36adcf3ee1..b8fda697b1 100644 --- a/android/navi-common/src/main/res/xml/default_remote_config.xml +++ b/android/navi-common/src/main/res/xml/default_remote_config.xml @@ -155,10 +155,6 @@ 30 - - USER_DATA_PAYLOAD_SIZE - 100 - SHOW_VHEALTH_CARD true diff --git a/android/navi-insurance/src/main/java/com/navi/insurance/network/ApiConstants.kt b/android/navi-insurance/src/main/java/com/navi/insurance/network/ApiConstants.kt index 42c0455218..92de40f94f 100644 --- a/android/navi-insurance/src/main/java/com/navi/insurance/network/ApiConstants.kt +++ b/android/navi-insurance/src/main/java/com/navi/insurance/network/ApiConstants.kt @@ -25,8 +25,6 @@ object ApiConstants { const val API_NULL_RESPONSE = 504 const val AADHAAR_USER_CANCELLED = 1003 - val USER_DATA_PAYLOAD_SIZE = FirebaseRemoteConfigHelper.getLong("USER_DATA_PAYLOAD_SIZE").toInt() - const val PENDING_DETAILS = "PENDING_DETAILS" const val PENDING_QUESTIONNAIRE = "PENDING_QUESTIONNAIRE" const val UNDER_REVIEW = "UNDER_REVIEW" diff --git a/android/navi-insurance/src/main/java/com/navi/insurance/util/Ext.kt b/android/navi-insurance/src/main/java/com/navi/insurance/util/Ext.kt index df5b67b8b4..2bb9901c08 100644 --- a/android/navi-insurance/src/main/java/com/navi/insurance/util/Ext.kt +++ b/android/navi-insurance/src/main/java/com/navi/insurance/util/Ext.kt @@ -65,13 +65,6 @@ fun Boolean.isFalse() = !this fun Boolean.isTrue() = this - -fun Cursor.getTotalPages(): Int { - val totalPages = count.div(ApiConstants.USER_DATA_PAYLOAD_SIZE) - if (count.rem(ApiConstants.USER_DATA_PAYLOAD_SIZE) > 0) return totalPages.inc() - return totalPages -} - fun View.setVisibilityValue(value: Int) { visibility = value } diff --git a/android/navi_pl_dynamic/src/main/AndroidManifest.xml b/android/navi_pl_dynamic/src/main/AndroidManifest.xml index b492c5dff4..4102ddc40e 100644 --- a/android/navi_pl_dynamic/src/main/AndroidManifest.xml +++ b/android/navi_pl_dynamic/src/main/AndroidManifest.xml @@ -74,11 +74,6 @@ android:exported="false" android:screenOrientation="portrait" android:theme="@style/BaseThemeStyle" /> - { - naviAnalyticsEventTracker.onDemandRepeatCheckOfferClicked() - readSmsData() - goToNextScreen() - } - R.id.back_iv -> activityExit() - } - } - - private fun goToNextScreen() { - naviAnalyticsEventTracker.onClickCheckNewLoanOffer() - val bundle = Bundle() - bundle.putBoolean(GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY, true) - upcomingLoanDetail?.cta?.let { - NaviDeepLinkNavigator.navigate(this, it, true, bundle) - } ?: run { - NaviDeepLinkNavigator.navigate( - this, - CtaData(url = NaviDeepLinkNavigator.PERMISSION), - true, - bundle - ) - } - } - - private fun readSmsData() { - if (!isReadSmsAlreadyCalled && permissionsManager?.hasPermissions(arrayOf(Manifest.permission.READ_SMS)) - .orFalse() - ) { - isReadSmsAlreadyCalled = true - setupRecurringWorkToReadSms() - } - } - - private fun setupRecurringWorkToReadSms() { - WorkManager.setupRecurringWorkToReadUserData( - PeriodicWorkRequestBuilder( - Constants.REPEAT_INTERVAL_FOR_PERIODIC_WORKER, - TimeUnit.DAYS - ), - UserSmsWorker.NAME - ) - } - - private fun initUI( - binding: PlActivityNewLoanConsentBinding, - upcomingLoanDetail: UpcomingLoanDetail - ) { - binding.greetingTv.text = upcomingLoanDetail.banner - binding.titleTv.text = upcomingLoanDetail.title - upcomingLoanDetail.features?.forEach { feature -> - val itemView: TextView = LayoutInflater.from(this) - .inflate(R.layout.pl_layout_item_loan_feature, binding.parentView, false) as TextView - itemView.text = feature - val layoutParams: ConstraintLayout.LayoutParams = - itemView.layoutParams as ConstraintLayout.LayoutParams - layoutParams.setMargins(0, dpToPx(FEATURE_VIEW_TOP_MARGIN), 0, 0) - binding.featuresView.addView(itemView, layoutParams) - } - var title = upcomingLoanDetail.cta?.title - if (title.isNullOrEmpty()) title = resources.getString(R.string.loan_consent_cta) - binding.ctaButton.setProperties( - title, - iconId = R.drawable.ic_arrow_right_white - ) - binding.noteTv.text = upcomingLoanDetail.note - binding.ctaButton.setOnClickListener(this) - } - - private fun getUpcomingLoanDetails(temp: com.navi.naviwidgets.models.response.UpcomingLoanDetail?): UpcomingLoanDetail { - return UpcomingLoanDetail( - banner = temp?.banner, - title = temp?.title, - features = temp?.features, - cta = temp?.cta, - note = temp?.note - ) - } - - override fun attachBaseContext(newBase: Context?) { - super.attachBaseContext(newBase) - if (newBase != null) { - SplitCompat.installActivity(newBase) - } - } -}