Skip to content

Commit a838855

Browse files
authored
Merge pull request #6 from shishir5/add_method_to_add_interceptors
Add method to add interceptors
2 parents 6453c4c + 1dde972 commit a838855

File tree

9 files changed

+69
-33
lines changed

9 files changed

+69
-33
lines changed

app/build.gradle

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
apply plugin: 'com.android.application'
22
apply plugin: 'kotlin-android'
3-
apply plugin: 'kotlin-android-extensions'
43
apply plugin: 'kotlin-kapt'
4+
apply plugin: 'kotlin-parcelize'
5+
56

67
android {
78
compileSdkVersion 29
@@ -29,8 +30,9 @@ android {
2930
targetCompatibility JavaVersion.VERSION_1_8
3031
}
3132

32-
androidExtensions {
33-
experimental = true
33+
34+
buildFeatures {
35+
dataBinding true
3436
}
3537
}
3638

app/src/main/java/com/zoomcar/networkclient/MainActivity.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,23 @@ package com.zoomcar.networkclient
33
import android.os.Bundle
44
import android.util.Log
55
import androidx.appcompat.app.AppCompatActivity
6+
import androidx.databinding.DataBindingUtil
67
import com.bluelinelabs.logansquare.LoganSquare
78
import com.google.gson.JsonElement
9+
import com.zoomcar.networkclient.databinding.ActivityMainBinding
810
import com.zoomcar.zcnetwork.core.ZcNetworkBuilder
911
import com.zoomcar.zcnetwork.core.ZcNetworkListener
1012
import com.zoomcar.zcnetwork.error.NetworkError
1113
import com.zoomcar.zcnetwork.utils.LibTag
1214
import com.zoomcar.zcnetwork.utils.ZcRequestType
13-
import kotlinx.android.synthetic.main.activity_main.*
1415

1516
class MainActivity : AppCompatActivity() {
1617

1718
override fun onCreate(savedInstanceState: Bundle?) {
1819
super.onCreate(savedInstanceState)
19-
setContentView(R.layout.activity_main)
20-
button.setOnClickListener {
20+
val binding: ActivityMainBinding =
21+
DataBindingUtil.setContentView(this, R.layout.activity_main)
22+
binding.button.setOnClickListener {
2123
val zcNetworkBuilder: ZcNetworkBuilder = ZcNetworkBuilder()
2224
.setActivity(this)
2325
.setBodyParams(hashMapOf("title" to "foo", "body" to "bar", "userId" to 1))
Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
xmlns:tools="http://schemas.android.com/tools"
5-
android:layout_width="match_parent"
6-
android:layout_height="match_parent"
7-
tools:context=".MainActivity">
2+
<layout>
3+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
4+
xmlns:app="http://schemas.android.com/apk/res-auto"
5+
xmlns:tools="http://schemas.android.com/tools"
6+
android:layout_width="match_parent"
7+
android:layout_height="match_parent"
8+
tools:context=".MainActivity">
89

9-
<androidx.appcompat.widget.AppCompatButton
10-
android:id="@+id/button"
11-
android:layout_width="wrap_content"
12-
android:layout_height="wrap_content"
13-
android:text="Press Me!"
14-
app:layout_constraintBottom_toBottomOf="parent"
15-
app:layout_constraintLeft_toLeftOf="parent"
16-
app:layout_constraintRight_toRightOf="parent"
17-
app:layout_constraintTop_toTopOf="parent" />
10+
<androidx.appcompat.widget.AppCompatButton
11+
android:id="@+id/button"
12+
android:layout_width="wrap_content"
13+
android:layout_height="wrap_content"
14+
android:text="Press Me!"
15+
app:layout_constraintBottom_toBottomOf="parent"
16+
app:layout_constraintLeft_toLeftOf="parent"
17+
app:layout_constraintRight_toRightOf="parent"
18+
app:layout_constraintTop_toTopOf="parent" />
1819

19-
</androidx.constraintlayout.widget.ConstraintLayout>
20+
</androidx.constraintlayout.widget.ConstraintLayout>
21+
</layout>

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Top-level build file where you can add configuration options common to all sub-projects/modules.
22
buildscript {
3-
ext.kotlin_version = "1.3.61"
3+
ext.kotlin_version = "1.4.32"
44
repositories {
55
google()
66
jcenter()

zcnetwork/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apply plugin: 'com.android.library'
2-
apply plugin: 'kotlin-kapt'
32
apply plugin: 'kotlin-android'
4-
apply plugin: 'kotlin-android-extensions'
3+
apply plugin: 'kotlin-kapt'
4+
apply plugin: 'kotlin-parcelize'
55

66
android {
77
compileSdkVersion 28

zcnetwork/src/main/java/com/zoomcar/zcnetwork/core/ZcNetworkBuilder.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.zoomcar.zcnetwork.core
33
import android.app.Activity
44
import androidx.fragment.app.Fragment
55
import com.zoomcar.zcnetwork.utils.ZcRequestType
6+
import okhttp3.Interceptor
67

78
/*
89
* @created 08/01/2020 - 12:35 PM
@@ -22,6 +23,7 @@ class ZcNetworkBuilder {
2223
private lateinit var requestType: ZcRequestType
2324
private var useDefaultService: Boolean = true
2425
private var baseUrl: String? = null
26+
private var interceptors: MutableList<Interceptor> = mutableListOf()
2527

2628
fun setActivity(activity: Activity): ZcNetworkBuilder = apply { this.activity = activity }
2729
fun setFragment(fragment: Fragment): ZcNetworkBuilder = apply { this.fragment = fragment }
@@ -40,7 +42,11 @@ class ZcNetworkBuilder {
4042
fun setListener(listener: ZcNetworkListener): ZcNetworkBuilder =
4143
apply { this.listener = listener }
4244

45+
fun addInterceptor(interceptor: Interceptor): ZcNetworkBuilder =
46+
apply { this.interceptors.add(interceptor)}
47+
4348
fun setTag(tag: String): ZcNetworkBuilder = apply { this.tag = tag }
49+
fun addInterceptor(tag: String): ZcNetworkBuilder = apply { this.tag = tag }
4450
fun setUrl(url: String): ZcNetworkBuilder = apply { this.url = url }
4551
fun setRequestType(requestType: ZcRequestType) = apply { this.requestType = requestType }
4652
fun setBaseUrl(baseUrl: String) = apply { this.baseUrl = baseUrl }
@@ -57,7 +63,8 @@ class ZcNetworkBuilder {
5763
tag,
5864
url,
5965
useDefaultService,
60-
bodyParams
66+
bodyParams,
67+
interceptors
6168
)
6269
}
6370
}

zcnetwork/src/main/java/com/zoomcar/zcnetwork/core/ZcNetworkManager.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.zoomcar.zcnetwork.utils.NetworkResponseStatus.FAILURE
1818
import com.zoomcar.zcnetwork.utils.NetworkResponseStatus.SUCCESS
1919
import com.zoomcar.zcnetwork.utils.ZcRequestType
2020
import com.zoomcar.zcnetwork.utils.getTimeDifferenceInMillis
21+
import okhttp3.Interceptor
2122
import retrofit2.Call
2223
import retrofit2.Callback
2324
import retrofit2.Response
@@ -33,6 +34,7 @@ object ZcNetworkManager {
3334
private var zcRequestManager: ZcRequestManager? = null
3435
private var isDebugLogEnabled: Boolean = false
3536
private var baseUrl: String? = null
37+
private var interceptors: MutableList<Interceptor> = mutableListOf()
3638

3739
fun builder(applicationContext: Context): ZcNetworkManager =
3840
apply { this.applicationContext = applicationContext }
@@ -45,14 +47,19 @@ object ZcNetworkManager {
4547
this.analyticsListener = analyticsListener
4648
}
4749

50+
fun addInterceptor(interceptor: Interceptor): ZcNetworkManager =
51+
apply {
52+
this.interceptors.add(interceptor)
53+
}
54+
4855
fun addBaseUrl(baseUrl: String?): ZcNetworkManager = apply { this.baseUrl = baseUrl }
4956

5057
fun build() {
5158
if (this.baseUrl == null) throw java.lang.IllegalArgumentException(
5259
CustomExceptions.NO_BASE_URL
5360
)
5461
zcRequestManager =
55-
ZcRequestManager.getInstance(applicationContext, isDebugLogEnabled, baseUrl!!)
62+
ZcRequestManager.getInstance(applicationContext, isDebugLogEnabled, baseUrl!!, interceptors)
5663
}
5764

5865
fun request(
@@ -66,7 +73,8 @@ object ZcNetworkManager {
6673
tag: String? = null,
6774
url: String,
6875
defaultService: Boolean = true,
69-
bodyParams: HashMap<String, Any>
76+
bodyParams: HashMap<String, Any>,
77+
interceptors: MutableList<Interceptor>
7078
) {
7179

7280
if (zcRequestManager == null) throw IllegalArgumentException(NOT_INITIALIZED)
@@ -153,7 +161,7 @@ object ZcNetworkManager {
153161
val call: Call<JsonElement>?
154162
if (defaultService) {
155163
val apiService =
156-
ZcRequestManager.getInstance(applicationContext, baseUrl = this.baseUrl!!)
164+
ZcRequestManager.getInstance(applicationContext, baseUrl = this.baseUrl!!, interceptor = interceptors)
157165
.getDefaultApiService()
158166
call = when (requestType) {
159167
ZcRequestType.GET -> apiService.getResource(url, requestParams)
@@ -171,7 +179,7 @@ object ZcNetworkManager {
171179
applicationContext: Context
172180
) {
173181
if (headerParams != null) {
174-
ZcRequestManager.getInstance(applicationContext, baseUrl = baseUrl!!)
182+
ZcRequestManager.getInstance(applicationContext, baseUrl = baseUrl!!, interceptor = interceptors)
175183
.setHeaderParams(headerParams)
176184
}
177185
}

zcnetwork/src/main/java/com/zoomcar/zcnetwork/core/ZcRequestManager.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.readystatesoftware.chuck.ChuckInterceptor
55
import com.zoomcar.zcnetwork.utils.TimeoutDefaults
66
import com.zoomcar.zcnetwork.utils.TimeoutHeaders
77
import okhttp3.HttpUrl
8+
import okhttp3.Interceptor
89
import okhttp3.OkHttpClient
910
import okhttp3.Request
1011
import okhttp3.logging.HttpLoggingInterceptor
@@ -20,7 +21,8 @@ import java.util.concurrent.TimeUnit
2021
class ZcRequestManager(
2122
private val applicationContext: Context,
2223
private val isDebugLogEnabled: Boolean,
23-
baseUrl: String
24+
baseUrl: String,
25+
private val interceptors: List<Interceptor>
2426
) {
2527

2628
private lateinit var defaultApiService: ZcApiService
@@ -41,11 +43,17 @@ class ZcRequestManager(
4143
fun getInstance(
4244
applicationContext: Context,
4345
debugLogEnabled: Boolean = false,
44-
baseUrl: String
46+
baseUrl: String,
47+
interceptor: List<Interceptor> = listOf()
4548
) =
4649
instance ?: synchronized(applicationContext) {
4750
instance
48-
?: ZcRequestManager(applicationContext, debugLogEnabled, baseUrl).also {
51+
?: ZcRequestManager(
52+
applicationContext,
53+
debugLogEnabled,
54+
baseUrl,
55+
interceptor
56+
).also {
4957
instance = it
5058
}
5159
}
@@ -90,6 +98,9 @@ class ZcRequestManager(
9098
val logging = HttpLoggingInterceptor()
9199
logging.level = HttpLoggingInterceptor.Level.BODY
92100
builder.addInterceptor(logging)
101+
interceptors.map {
102+
builder.addInterceptor(it)
103+
}
93104
builder.addInterceptor(ChuckInterceptor(applicationContext))
94105
}
95106

zcnetwork/src/main/java/com/zoomcar/zcnetwork/models/BaseErrorVO.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import kotlinx.android.parcel.RawValue
1111
@JsonObject
1212
open class BaseErrorVO : Parcelable {
1313
@JsonField
14+
@SerializedName(value = "status")
1415
var status: Int = 0
1516

1617
@SerializedName(value = "error_code")
@@ -21,12 +22,15 @@ open class BaseErrorVO : Parcelable {
2122
@JsonField(name = ["error_title"])
2223
var errorTitle: String? = null
2324

25+
@SerializedName("msg")
2426
@JsonField
2527
var msg: String? = null
2628

2729
@JsonField
30+
@SerializedName("httpStatusCode")
2831
var httpStatusCode: Int = 0
2932

3033
@JsonField(name = ["metadata"])
34+
@SerializedName("metadata")
3135
var metadata: MutableMap<String, @RawValue Any?>? = null
3236
}

0 commit comments

Comments
 (0)