TP-38663 | HPC | Add GZIP Header in v2/home (#7583)
This commit is contained in:
@@ -8,14 +8,16 @@
|
||||
package com.naviapp.home.respository
|
||||
|
||||
import com.navi.base.sharedpref.PreferenceManager
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.model.ModuleName
|
||||
import com.navi.common.model.common.WidgetResponse
|
||||
import com.navi.common.network.models.RepoResult
|
||||
import com.navi.common.utils.Constants.GZIP
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.naviwidgets.models.response.CtaDetails
|
||||
import com.navi.naviwidgets.utils.APP_UPDATE_ENABLE
|
||||
import com.naviapp.home.dashboard.models.response.InvestmentsResponse
|
||||
import com.naviapp.home.model.BottomBarResponse
|
||||
import com.navi.common.model.common.WidgetResponse
|
||||
import com.navi.naviwidgets.models.response.CtaDetails
|
||||
import com.naviapp.network.di.SuperAppRetroFit
|
||||
import com.naviapp.network.retrofit.ResponseCallback
|
||||
import com.naviapp.network.retrofit.RetrofitService
|
||||
@@ -51,7 +53,8 @@ class GlobalRepo @Inject constructor(@SuperAppRetroFit private val superAppRetro
|
||||
availableAppVersionCode,
|
||||
isPermissionsGranted,
|
||||
installedModules,
|
||||
appVariantAvailable
|
||||
appVariantAvailable,
|
||||
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.HOME_GZIP_ENABLED)) GZIP else null
|
||||
)
|
||||
)
|
||||
else
|
||||
@@ -63,7 +66,8 @@ class GlobalRepo @Inject constructor(@SuperAppRetroFit private val superAppRetro
|
||||
availableAppVersionCode,
|
||||
isPermissionsGranted,
|
||||
installedModules,
|
||||
appVariantAvailable
|
||||
appVariantAvailable,
|
||||
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.HOME_GZIP_ENABLED)) GZIP else null
|
||||
)
|
||||
)
|
||||
homeResponse.emit(response)
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
|
||||
package com.naviapp.home.respository
|
||||
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.network.models.RepoResult
|
||||
import com.navi.common.utils.log
|
||||
import com.navi.common.model.common.WidgetResponse
|
||||
import com.navi.common.utils.Constants.GZIP
|
||||
import com.naviapp.network.di.SuperAppRetroFit
|
||||
import com.naviapp.network.retrofit.ResponseCallback
|
||||
import com.naviapp.network.retrofit.RetrofitService
|
||||
@@ -34,7 +36,8 @@ class HomeRepository @Inject constructor(@SuperAppRetroFit private val superAppR
|
||||
availableAppVersionCode,
|
||||
isPermissionsGranted,
|
||||
installedModules,
|
||||
appVariantAvailable
|
||||
appVariantAvailable,
|
||||
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.HOME_GZIP_ENABLED)) GZIP else null
|
||||
)
|
||||
)
|
||||
else
|
||||
@@ -46,7 +49,8 @@ class HomeRepository @Inject constructor(@SuperAppRetroFit private val superAppR
|
||||
availableAppVersionCode,
|
||||
isPermissionsGranted,
|
||||
installedModules,
|
||||
appVariantAvailable
|
||||
appVariantAvailable,
|
||||
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.HOME_GZIP_ENABLED)) GZIP else null
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
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
|
||||
@@ -684,7 +685,8 @@ interface RetrofitService {
|
||||
@Header(AVAILABLE_APP_VERSION_CODE) availableAppVersionCode: Int?,
|
||||
@Header(HEADER_PERMISSIONS) isPermissionGranted: Boolean,
|
||||
@Header(HEADER_INSTALLED_MODULES) installedModules: String,
|
||||
@Query("appVariantAvailable") appVariantAvailable: Boolean
|
||||
@Query("appVariantAvailable") appVariantAvailable: Boolean,
|
||||
@Header(ACCEPT_ENCODING) acceptEncoding: String? = "*"
|
||||
): Response<GenericResponse<WidgetResponse>>
|
||||
|
||||
@GET("/v2/home")
|
||||
@@ -692,7 +694,8 @@ interface RetrofitService {
|
||||
@Header(AVAILABLE_APP_VERSION_CODE) availableAppVersionCode: Int?,
|
||||
@Header(HEADER_PERMISSIONS) isPermissionGranted: Boolean,
|
||||
@Header(HEADER_INSTALLED_MODULES) installedModules: String,
|
||||
@Query("appVariantAvailable") appVariantAvailable: Boolean
|
||||
@Query("appVariantAvailable") appVariantAvailable: Boolean,
|
||||
@Header(ACCEPT_ENCODING) acceptEncoding: String? = "*"
|
||||
): Response<GenericResponse<WidgetResponse>>
|
||||
|
||||
@GET("/v1/cards?groupType=STORY")
|
||||
|
||||
@@ -59,6 +59,7 @@ object FirebaseRemoteConfigHelper {
|
||||
const val SSL_PINNING_ENABLED = "SSL_PINNING_ENABLED"
|
||||
const val SSL_PINNING_KEY = "SSL_PINNING_KEY"
|
||||
const val NAVI_UPI_ENABLED = "NAVI_UPI_ENABLED"
|
||||
const val HOME_GZIP_ENABLED = "HOME_GZIP_ENABLED"
|
||||
|
||||
fun init() {
|
||||
remoteConfig = getFirebaseRemoteConfig()
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.navi.base.utils.isDataNeedsToUpdate
|
||||
import com.navi.common.constants.NETWORK_CRASH
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.authenticator.TokenAuthenticator
|
||||
import com.navi.common.network.interceptor.GzipInterceptor
|
||||
import com.navi.common.network.models.ErrorMessage
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.utils.log
|
||||
@@ -56,6 +57,7 @@ abstract class BaseHttpClient(
|
||||
writeTimeout(networkInfo.timeoutInSec, TimeUnit.SECONDS)
|
||||
readTimeout(networkInfo.timeoutInSec, TimeUnit.SECONDS)
|
||||
addInterceptor(headerInterceptor)
|
||||
addInterceptor(GzipInterceptor())
|
||||
if (shouldAddAuthenticator) {
|
||||
authenticator(TokenAuthenticator.getInstance())
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.navi.common.network.interceptor
|
||||
|
||||
import com.google.common.net.HttpHeaders.CONTENT_ENCODING
|
||||
import com.google.common.net.HttpHeaders.CONTENT_LENGTH
|
||||
import com.navi.common.utils.Constants.GZIP
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
import okhttp3.ResponseBody.Companion.toResponseBody
|
||||
import okio.GzipSource
|
||||
import okio.buffer
|
||||
|
||||
class GzipInterceptor : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val response = chain.proceed(chain.request())
|
||||
return if (isGzipped(response)) {
|
||||
unzip(response)
|
||||
} else {
|
||||
response
|
||||
}
|
||||
}
|
||||
|
||||
private fun unzip(response: Response): Response {
|
||||
val responseBody = response.body ?: return response
|
||||
val gzipSource = GzipSource(responseBody.source())
|
||||
val bodyString = gzipSource.buffer().readUtf8()
|
||||
val newResponseBody = bodyString.toResponseBody(responseBody.contentType())
|
||||
val strippedHeaders = response.headers.newBuilder()
|
||||
.removeAll(CONTENT_ENCODING)
|
||||
.removeAll(CONTENT_LENGTH)
|
||||
.build()
|
||||
return response.newBuilder()
|
||||
.headers(strippedHeaders)
|
||||
.body(newResponseBody)
|
||||
.message(response.message)
|
||||
.build()
|
||||
}
|
||||
|
||||
private fun isGzipped(response: Response): Boolean {
|
||||
return response.header(CONTENT_ENCODING) == GZIP
|
||||
}
|
||||
}
|
||||
@@ -200,4 +200,5 @@ object Constants {
|
||||
const val HIDE = "hide"
|
||||
const val LOGOUT = "logout"
|
||||
const val USER_DATA_PAYLOAD_SIZE = 1000
|
||||
const val GZIP = "gzip"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user