NTP-7163 | Added Network Connectivity Interceptor (#13070)
Co-authored-by: Kishan Kumar <kishan.kumar@navi.com>
This commit is contained in:
@@ -50,6 +50,7 @@ object FirebaseRemoteConfigHelper {
|
||||
const val PRELOAD_HMS_NATIVE_LIB = "PRELOAD_HMS_NATIVE_LIB"
|
||||
const val PRELOAD_NAVI_NATIVE_LIB = "PRELOAD_NAVI_NATIVE_LIB"
|
||||
const val SSL_PINNING_ENABLED = "SSL_PINNING_ENABLED"
|
||||
const val NETWORK_CONNECTIVITY_INTERCEPTOR_ENABLED = "NETWORK_CONNECTIVITY_INTERCEPTOR_ENABLED"
|
||||
const val SSL_PINNING_KEY = "SSL_PINNING_KEY"
|
||||
const val ENABLE_LOGIN_OTP_SENDER_VERIFICATION = "ENABLE_LOGIN_OTP_SENDER_VERIFICATION"
|
||||
const val LOGIN_OTP_SENDER_ID = "LOGIN_OTP_SENDER_ID"
|
||||
|
||||
@@ -21,6 +21,7 @@ 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.interceptor.MetricInterceptor
|
||||
import com.navi.common.network.interceptor.NetworkConnectivityInterceptor
|
||||
import com.navi.common.network.interceptor.S3TimeoutInterceptor
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.utils.isS3TimeoutOverrideEnabled
|
||||
@@ -59,6 +60,10 @@ abstract class BaseHttpClient(
|
||||
if (shouldAddAuthenticator) {
|
||||
authenticator(TokenAuthenticator.getInstance())
|
||||
}
|
||||
addInterceptor(MetricInterceptor())
|
||||
if (isNetworkConnectivityInterceptorEnabled()) {
|
||||
addInterceptor(NetworkConnectivityInterceptor())
|
||||
}
|
||||
if (addRootCaCertificate()) {
|
||||
val certificates = getCertificates(context, R.raw.isrgrootx1)
|
||||
sslSocketFactory(certificates.sslSocketFactory(), certificates.trustManager)
|
||||
@@ -77,7 +82,6 @@ abstract class BaseHttpClient(
|
||||
addInterceptor(S3TimeoutInterceptor())
|
||||
}
|
||||
|
||||
addInterceptor(MetricInterceptor())
|
||||
protocols(listOf(Protocol.HTTP_1_1))
|
||||
if (
|
||||
FirebaseRemoteConfigHelper.getBoolean(
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.navi.analytics.utils.NaviTrackEvent
|
||||
import com.navi.base.AppServiceManager
|
||||
import com.navi.base.utils.BaseUtils
|
||||
import com.navi.common.constants.NETWORK_CRASH
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.network.models.ErrorMessage
|
||||
import com.navi.common.network.models.GenericResponse
|
||||
import com.navi.common.utils.CommonNaviAnalytics
|
||||
@@ -107,3 +108,8 @@ fun logIOException(e: Exception, errorMessage: ErrorMessage, request: Request) {
|
||||
e.log()
|
||||
}
|
||||
}
|
||||
|
||||
fun isNetworkConnectivityInterceptorEnabled() =
|
||||
FirebaseRemoteConfigHelper.getBoolean(
|
||||
FirebaseRemoteConfigHelper.NETWORK_CONNECTIVITY_INTERCEPTOR_ENABLED
|
||||
)
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2024 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.common.network.interceptor
|
||||
|
||||
import com.navi.base.AppServiceManager
|
||||
import com.navi.base.network.util.ApiConstants
|
||||
import com.navi.base.utils.BaseUtils
|
||||
import com.navi.common.R
|
||||
import com.navi.common.network.handleException
|
||||
import com.navi.common.network.logIOException
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.Protocol
|
||||
import okhttp3.Response
|
||||
import okhttp3.ResponseBody
|
||||
|
||||
class NetworkConnectivityInterceptor : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request()
|
||||
if (!BaseUtils.isNetworkAvailable(AppServiceManager.application)) {
|
||||
// A mocked response in case of no internet
|
||||
return Response.Builder()
|
||||
.request(request)
|
||||
.protocol(Protocol.HTTP_2)
|
||||
.code(com.navi.common.network.ApiConstants.NO_INTERNET)
|
||||
.message(AppServiceManager.application.getString(R.string.no_internet_connection))
|
||||
.body(ResponseBody.create("application/json".toMediaTypeOrNull(), "{}"))
|
||||
.addHeader("content-type", "application/json")
|
||||
.build()
|
||||
}
|
||||
return try {
|
||||
chain.proceed(request)
|
||||
} catch (e: Exception) {
|
||||
val errorMessage = handleException(e)
|
||||
logIOException(e, errorMessage, request)
|
||||
// A mocked response in case of n/w exception
|
||||
val errorStatusCode: Int = errorMessage.statusCode ?: ApiConstants.API_CODE_ERROR
|
||||
Response.Builder()
|
||||
.request(request)
|
||||
.protocol(Protocol.HTTP_2)
|
||||
.code(errorStatusCode)
|
||||
.message(e.message.orEmpty())
|
||||
.body(ResponseBody.create("application/json".toMediaTypeOrNull(), "{}"))
|
||||
.addHeader("content-type", "application/json")
|
||||
.build()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user