From 7bde56da6281ba898923be38dc0ba858567d3bb4 Mon Sep 17 00:00:00 2001 From: Sayed Owais Ali Date: Tue, 4 Jun 2024 17:03:40 +0530 Subject: [PATCH] TP-67636 | Owais | webp image and time from backend changes (#183) --- .../navi/alfred/demo/AlfredDemoApplication.kt | 2 +- .../main/java/com/navi/alfred/AlfredConfig.kt | 16 ++++-- .../com/navi/alfred/model/FailureRequest.kt | 3 +- .../com/navi/alfred/model/SessionRequest.kt | 4 +- .../alfred/network/model/CruiseResponse.kt | 4 +- .../com/navi/alfred/utils/AlfredConstants.kt | 5 +- .../navi/alfred/utils/CruiseConfigUtils.kt | 6 ++- .../java/com/navi/alfred/utils/EventUtils.kt | 8 +-- .../com/navi/alfred/utils/ScreenShotUtils.kt | 53 ++++++++++++------- 9 files changed, 68 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/navi/alfred/demo/AlfredDemoApplication.kt b/app/src/main/java/com/navi/alfred/demo/AlfredDemoApplication.kt index 7c3f05e..b4d5611 100644 --- a/app/src/main/java/com/navi/alfred/demo/AlfredDemoApplication.kt +++ b/app/src/main/java/com/navi/alfred/demo/AlfredDemoApplication.kt @@ -40,7 +40,7 @@ class AlfredDemoApplication : Application(), Application.ActivityLifecycleCallba "qa", "oMv77fgpBg9NFGom0Psizbf7lbrdBVJz" ) - AlfredManager.init(alfredConfig, this) + AlfredManager.init(alfredConfig, this, 27, "Critical Journey is active") getAlfredCruiseInfo() // Dumping anr data to click stream diff --git a/navi-alfred/src/main/java/com/navi/alfred/AlfredConfig.kt b/navi-alfred/src/main/java/com/navi/alfred/AlfredConfig.kt index 05a645c..92ee0fa 100644 --- a/navi-alfred/src/main/java/com/navi/alfred/AlfredConfig.kt +++ b/navi-alfred/src/main/java/com/navi/alfred/AlfredConfig.kt @@ -63,7 +63,9 @@ data class AlfredConfig( internal var memoryUsageBeforeEventStart: Float? = null, internal var storageUsageBeforeEventStart: Float? = null, internal var batteryPercentageBeforeEventStart: Float? = null, - internal var cruiseAttributes: CruiseAttributes = CruiseAttributes() + internal var cruiseAttributes: CruiseAttributes = CruiseAttributes(), + internal var imageType: String = AlfredConstants.IMAGE_TYPE_JPEG, + internal var alfredTimeGap: Long = 0 ) { constructor( appName: String, @@ -90,18 +92,18 @@ data class AlfredConfig( if (setToNext == true) { this.eventStartRecordingTime = this.nextEventStartRecordingTime } else { - this.eventStartRecordingTime = System.currentTimeMillis() + this.eventStartRecordingTime = AlfredManager.config.getAlfredCurrentTimeMillis() } } fun setNextEventStartRecordingTime() { - this.nextEventStartRecordingTime = System.currentTimeMillis() + this.nextEventStartRecordingTime = AlfredManager.config.getAlfredCurrentTimeMillis() } fun getEventStartRecordingTime(): Long? = this.eventStartRecordingTime fun setSessionStartRecordingTime() { - this.sessionStartRecordingTime = System.currentTimeMillis() + this.sessionStartRecordingTime = AlfredManager.config.getAlfredCurrentTimeMillis() } fun getSessionStartRecordingTime(): Long = this.sessionStartRecordingTime @@ -138,7 +140,7 @@ data class AlfredConfig( fun getEnableRecordingStatus(): Boolean = this.enableRecording - fun getEventTimeStamp(): Long = System.currentTimeMillis() + fun getEventTimeStamp(): Long = AlfredManager.config.getAlfredCurrentTimeMillis() fun setUserId(userId: String?) { this.userId = userId @@ -346,4 +348,8 @@ data class AlfredConfig( fun setLatestScreenshotTimestamp(timestamp: Long) { this.latestScreenshotTimestamp = timestamp } + + internal fun getAlfredCurrentTimeMillis(): Long { + return System.currentTimeMillis() - alfredTimeGap + } } diff --git a/navi-alfred/src/main/java/com/navi/alfred/model/FailureRequest.kt b/navi-alfred/src/main/java/com/navi/alfred/model/FailureRequest.kt index d9fe917..76a9559 100644 --- a/navi-alfred/src/main/java/com/navi/alfred/model/FailureRequest.kt +++ b/navi-alfred/src/main/java/com/navi/alfred/model/FailureRequest.kt @@ -20,7 +20,8 @@ data class Failure( @SerializedName("request_url") val requestUrl: String? = "", @SerializedName("request_method") val requestMethod: String? = "", @SerializedName("client_ts") val clientTs: Long? = null, - @SerializedName("error_timestamp") val errorTimestamp: Long? = System.currentTimeMillis(), + @SerializedName("error_timestamp") + val errorTimestamp: Long? = AlfredManager.config.getAlfredCurrentTimeMillis(), @SerializedName("zip_name") val zipName: List? = null, @SerializedName("error_name") val errorName: String? = "", @SerializedName("error_status_code") val errorStatusCode: Long? = 0, diff --git a/navi-alfred/src/main/java/com/navi/alfred/model/SessionRequest.kt b/navi-alfred/src/main/java/com/navi/alfred/model/SessionRequest.kt index e010696..4a78b7f 100644 --- a/navi-alfred/src/main/java/com/navi/alfred/model/SessionRequest.kt +++ b/navi-alfred/src/main/java/com/navi/alfred/model/SessionRequest.kt @@ -70,7 +70,9 @@ data class BaseAttribute( @SerializedName("metadata") val metaData: MetaData = MetaData(), @SerializedName("snapshot_per_second") val snapshotPerSecond: Int? = AlfredManager.config.getSnapshotPerSecond(), - @SerializedName("phone_number") val phoneNumber: String? = AlfredManager.config.getPhoneNumber() + @SerializedName("phone_number") + val phoneNumber: String? = AlfredManager.config.getPhoneNumber(), + @SerializedName("image_type") val imageType: String? = AlfredManager.config.imageType ) data class SessionEventAttribute( diff --git a/navi-alfred/src/main/java/com/navi/alfred/network/model/CruiseResponse.kt b/navi-alfred/src/main/java/com/navi/alfred/network/model/CruiseResponse.kt index 628f3f1..fb5b760 100644 --- a/navi-alfred/src/main/java/com/navi/alfred/network/model/CruiseResponse.kt +++ b/navi-alfred/src/main/java/com/navi/alfred/network/model/CruiseResponse.kt @@ -24,7 +24,9 @@ data class Source( @SerializedName("metrics_config") val metricsConfig: MetricsConfig? = null, @SerializedName("os_config") val osConfig: OsConfig? = null, @SerializedName("recordings_config") val recordingsConfig: RecordingsConfig? = null, - @SerializedName("type") val type: String? = null + @SerializedName("type") val type: String? = null, + @SerializedName("image_type") val imageType: String? = null, + @SerializedName("current_time") val currentTime: Long? = null ) data class RecordingsConfig( diff --git a/navi-alfred/src/main/java/com/navi/alfred/utils/AlfredConstants.kt b/navi-alfred/src/main/java/com/navi/alfred/utils/AlfredConstants.kt index 32c1d02..0b34d10 100644 --- a/navi-alfred/src/main/java/com/navi/alfred/utils/AlfredConstants.kt +++ b/navi-alfred/src/main/java/com/navi/alfred/utils/AlfredConstants.kt @@ -79,7 +79,10 @@ object AlfredConstants { const val SENSITIVE_COMPOSE_VIEW_TAG = "sensitive_compose_view" const val EVENT_DB_NAME = "navi-analytics" const val ZIP_FILE_EXTENSION = ".zip" - const val IMAGE_FILE_EXTENSION = ".jpeg" + const val IMAGE_FILE_EXTENSION_JPEG = ".jpeg" + const val IMAGE_FILE_EXTENSION_WEBP = ".webp" + const val IMAGE_TYPE_JPEG = "jpeg" + const val IMAGE_TYPE_WEBP = "webp" const val SYNC_EVENT_TASK = "SyncEventTask" const val SYNC_FAILURE_TASK = "SyncFailureTask" const val SYNC_NEGATIVE_CASE_TASK = "SyncNegativeCaseTask" diff --git a/navi-alfred/src/main/java/com/navi/alfred/utils/CruiseConfigUtils.kt b/navi-alfred/src/main/java/com/navi/alfred/utils/CruiseConfigUtils.kt index b83ff7c..9560482 100644 --- a/navi-alfred/src/main/java/com/navi/alfred/utils/CruiseConfigUtils.kt +++ b/navi-alfred/src/main/java/com/navi/alfred/utils/CruiseConfigUtils.kt @@ -41,7 +41,7 @@ internal suspend fun getCruiseConfig(cruiseApiSuccessful: (response: CruiseRespo errorType = AlfredConstants.API_ERROR, requestUrl = DEFAULT_CRUISE_CONFIG_URL, requestMethod = AlfredConstants.GET_METHOD, - errorTimestamp = System.currentTimeMillis(), + errorTimestamp = AlfredManager.config.getAlfredCurrentTimeMillis(), errorName = AlfredConstants.GET_CRUISE_CONFIG_FAILURE, errorStatusCode = response.code().toLong(), errorMessage = response.message() @@ -109,6 +109,10 @@ private fun setCruiseConfig(cruiseResponse: CruiseResponse) { AlfredManager.config.setApiMetricsEnableStatus(!api_monitor_status) } } + source.imageType?.let { imageType -> AlfredManager.config.imageType = imageType } + source.currentTime?.let { currentTime -> + AlfredManager.config.alfredTimeGap = currentTime - System.currentTimeMillis() + } } } } diff --git a/navi-alfred/src/main/java/com/navi/alfred/utils/EventUtils.kt b/navi-alfred/src/main/java/com/navi/alfred/utils/EventUtils.kt index 9f5c72c..8906f59 100644 --- a/navi-alfred/src/main/java/com/navi/alfred/utils/EventUtils.kt +++ b/navi-alfred/src/main/java/com/navi/alfred/utils/EventUtils.kt @@ -518,7 +518,7 @@ internal fun buildEvent( screenName: String? = null, moduleName: String? = null ): AnalyticsEvent { - val timeStamp = System.currentTimeMillis() + val timeStamp = AlfredManager.config.getAlfredCurrentTimeMillis() val eventData = EventAttribute( eventId = UUID.randomUUID().toString(), @@ -543,7 +543,7 @@ internal fun buildNegativeCaseEvent( screenName: String? = null, moduleName: String? = null ): NegativeCase { - val timeStamp = System.currentTimeMillis() + val timeStamp = AlfredManager.config.getAlfredCurrentTimeMillis() val eventData = EventAttribute( eventId = UUID.randomUUID().toString(), @@ -572,7 +572,7 @@ internal fun buildFailureEvent( clientTs: Long? = null, eventIdList: List? = null ): FailureEvent { - val timeStamp = System.currentTimeMillis() + val timeStamp = AlfredManager.config.getAlfredCurrentTimeMillis() val eventData = Failure( errorType = errorType, @@ -594,7 +594,7 @@ internal fun buildAppPerformanceEvent( eventType: String, attribute: HashMap? = null ): ApiMetricHelper { - val timeStamp = System.currentTimeMillis() + val timeStamp = AlfredManager.config.getAlfredCurrentTimeMillis() val metricData = MetricAttribute( eventId = AlfredManager.config.getAlfredEventId(), diff --git a/navi-alfred/src/main/java/com/navi/alfred/utils/ScreenShotUtils.kt b/navi-alfred/src/main/java/com/navi/alfred/utils/ScreenShotUtils.kt index ee0a609..d78554b 100644 --- a/navi-alfred/src/main/java/com/navi/alfred/utils/ScreenShotUtils.kt +++ b/navi-alfred/src/main/java/com/navi/alfred/utils/ScreenShotUtils.kt @@ -83,28 +83,42 @@ internal fun insertScreenShotPathInDb( scope.launch(Dispatchers.IO) { try { val fileDir = context.filesDir - val currentTime = System.currentTimeMillis() + val currentTime = AlfredManager.config.getAlfredCurrentTimeMillis() AlfredManager.config.setLatestScreenshotTimestamp(currentTime) - val fileName = currentTime.toString() + AlfredConstants.IMAGE_FILE_EXTENSION + + val imageFileExtension = + if (AlfredManager.config.imageType == AlfredConstants.IMAGE_TYPE_WEBP) { + AlfredConstants.IMAGE_FILE_EXTENSION_WEBP + } else { + AlfredConstants.IMAGE_FILE_EXTENSION_JPEG + } + + val fileName = currentTime.toString() + imageFileExtension val path = fileDir.path.plus("/").plus(fileName) val imageUrl = File(path) val fos = FileOutputStream(imageUrl) - val videoQuality: Int = - when (AlfredManager.config.getVideoQuality()) { - VideoQuality.HIGH.name -> { - 10 + + if (AlfredManager.config.imageType == AlfredConstants.IMAGE_TYPE_WEBP) { + bitmap?.compress(Bitmap.CompressFormat.WEBP, 0, fos) + } else { + val videoQuality: Int = + when (AlfredManager.config.getVideoQuality()) { + VideoQuality.HIGH.name -> { + 10 + } + VideoQuality.LOW.name -> { + 6 + } + VideoQuality.MEDIUM.name -> { + 8 + } + else -> { + 10 + } } - VideoQuality.LOW.name -> { - 6 - } - VideoQuality.MEDIUM.name -> { - 8 - } - else -> { - 10 - } - } - bitmap?.compress(Bitmap.CompressFormat.JPEG, videoQuality, fos) + bitmap?.compress(Bitmap.CompressFormat.JPEG, videoQuality, fos) + } + fos.flush() fos.close() if (bottomSheetFlow == false) { @@ -112,7 +126,10 @@ internal fun insertScreenShotPathInDb( val screenShotDao = db.screenShotDao() try { screenShotDao.insertScreenShotPath( - ScreenShotPathHelper(System.currentTimeMillis(), path) + ScreenShotPathHelper( + AlfredManager.config.getAlfredCurrentTimeMillis(), + path + ) ) ScreenShotStorageHelper.addImage(path) } catch (e: Exception) {