Skip to content
This repository was archived by the owner on Aug 18, 2021. It is now read-only.

Commit 9202556

Browse files
committed
add: filter model
update: Generic Type Response
1 parent e93cd6e commit 9202556

File tree

13 files changed

+236
-197
lines changed

13 files changed

+236
-197
lines changed

app/src/main/java/com/frogobox/themealsapi/MainActivity.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,20 @@ import android.os.Bundle
44
import androidx.appcompat.app.AppCompatActivity
55
import com.frogobox.frogothemealdbapi.ConsumeMealApi
66
import com.frogobox.frogothemealdbapi.callback.MealResultCallback
7-
import com.frogobox.frogothemealdbapi.data.response.CategoriesList
8-
import com.frogobox.frogothemealdbapi.data.response.Meals
7+
import com.frogobox.frogothemealdbapi.data.model.Category
8+
import com.frogobox.frogothemealdbapi.data.response.MealResponse
99

1010
class MainActivity : AppCompatActivity() {
11-
12-
13-
11+
1412
override fun onCreate(savedInstanceState: Bundle?) {
1513
super.onCreate(savedInstanceState)
1614
setContentView(R.layout.activity_main)
1715

1816
val consumeMealApi = ConsumeMealApi("1")
1917

2018
consumeMealApi.usingChuckInterceptor(this)
21-
consumeMealApi.listAllCateories(object : MealResultCallback<CategoriesList> {
22-
override fun getResultData(data: CategoriesList) {
19+
consumeMealApi.listAllCateories(object : MealResultCallback<MealResponse<Category>> {
20+
override fun getResultData(data: MealResponse<Category>) {
2321
for (i in data.meals!!.indices) {
2422

2523
}

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/ConsumeMealApi.kt

Lines changed: 106 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package com.frogobox.frogothemealdbapi
22

33
import android.content.Context
44
import com.frogobox.frogothemealdbapi.callback.MealResultCallback
5-
import com.frogobox.frogothemealdbapi.data.response.*
5+
import com.frogobox.frogothemealdbapi.data.model.*
6+
import com.frogobox.frogothemealdbapi.data.response.CategoryResponse
7+
import com.frogobox.frogothemealdbapi.data.response.MealResponse
68
import com.frogobox.frogothemealdbapi.data.source.MealDataSource
79
import com.frogobox.frogothemealdbapi.data.source.MealRemoteDataSource
810
import com.frogobox.frogothemealdbapi.data.source.MealRepository
@@ -32,24 +34,30 @@ class ConsumeMealApi(private val apiKey: String) : ConsumeMealApiView {
3234
repository.usingChuckInterceptor(context)
3335
}
3436

35-
override fun searchMeal(mealName: String, callback: MealResultCallback<Meals>) {
36-
repository.searchMeal(apiKey, mealName, object : MealDataSource.GetRemoteCallback<Meals> {
37-
override fun onSuccess(data: Meals) {
38-
callback.getResultData(data)
39-
}
37+
override fun searchMeal(mealName: String, callback: MealResultCallback<MealResponse<Meal>>) {
38+
repository.searchMeal(
39+
apiKey,
40+
mealName,
41+
object : MealDataSource.GetRemoteCallback<MealResponse<Meal>> {
42+
override fun onSuccess(data: MealResponse<Meal>) {
43+
callback.getResultData(data)
44+
}
4045

41-
override fun onFailed(statusCode: Int, errorMessage: String?) {
42-
callback.failedResult(statusCode, errorMessage)
43-
}
44-
})
46+
override fun onFailed(statusCode: Int, errorMessage: String?) {
47+
callback.failedResult(statusCode, errorMessage)
48+
}
49+
})
4550
}
4651

47-
override fun listAllMeal(firstLetter: String, callback: MealResultCallback<Meals>) {
52+
override fun listAllMeal(
53+
firstLetter: String,
54+
callback: MealResultCallback<MealResponse<Meal>>
55+
) {
4856
repository.listAllMeal(
4957
apiKey,
5058
firstLetter,
51-
object : MealDataSource.GetRemoteCallback<Meals> {
52-
override fun onSuccess(data: Meals) {
59+
object : MealDataSource.GetRemoteCallback<MealResponse<Meal>> {
60+
override fun onSuccess(data: MealResponse<Meal>) {
5361
callback.getResultData(data)
5462
}
5563

@@ -59,75 +67,106 @@ class ConsumeMealApi(private val apiKey: String) : ConsumeMealApiView {
5967
})
6068
}
6169

62-
override fun lookupFullMeal(idMeal: String, callback: MealResultCallback<Meals>) {
63-
repository.lookupFullMeal(apiKey, idMeal, object : MealDataSource.GetRemoteCallback<Meals> {
64-
override fun onSuccess(data: Meals) {
65-
callback.getResultData(data)
66-
}
70+
override fun lookupFullMeal(idMeal: String, callback: MealResultCallback<MealResponse<Meal>>) {
71+
repository.lookupFullMeal(
72+
apiKey,
73+
idMeal,
74+
object : MealDataSource.GetRemoteCallback<MealResponse<Meal>> {
75+
override fun onSuccess(data: MealResponse<Meal>) {
76+
callback.getResultData(data)
77+
}
6778

68-
override fun onFailed(statusCode: Int, errorMessage: String?) {
69-
callback.failedResult(statusCode, errorMessage)
70-
}
71-
})
79+
override fun onFailed(statusCode: Int, errorMessage: String?) {
80+
callback.failedResult(statusCode, errorMessage)
81+
}
82+
})
7283
}
7384

74-
override fun lookupRandomMeal(callback: MealResultCallback<Meals>) {
75-
repository.lookupRandomMeal(apiKey, object : MealDataSource.GetRemoteCallback<Meals> {
76-
override fun onSuccess(data: Meals) {
77-
callback.getResultData(data)
78-
}
85+
override fun lookupRandomMeal(callback: MealResultCallback<MealResponse<Meal>>) {
86+
repository.lookupRandomMeal(
87+
apiKey,
88+
object : MealDataSource.GetRemoteCallback<MealResponse<Meal>> {
89+
override fun onSuccess(data: MealResponse<Meal>) {
90+
callback.getResultData(data)
91+
}
7992

80-
override fun onFailed(statusCode: Int, errorMessage: String?) {
81-
callback.failedResult(statusCode, errorMessage)
82-
}
83-
})
93+
override fun onFailed(statusCode: Int, errorMessage: String?) {
94+
callback.failedResult(statusCode, errorMessage)
95+
}
96+
})
8497
}
8598

86-
override fun listMealCategories(callback: MealResultCallback<Categories>) {
87-
repository.listMealCategories(apiKey, object : MealDataSource.GetRemoteCallback<Categories> {
88-
override fun onSuccess(data: Categories) {
89-
callback.getResultData(data)
90-
}
99+
override fun listMealCategories(callback: MealResultCallback<CategoryResponse>) {
100+
repository.listMealCategories(
101+
apiKey,
102+
object : MealDataSource.GetRemoteCallback<CategoryResponse> {
103+
override fun onSuccess(data: CategoryResponse) {
104+
callback.getResultData(data)
105+
}
91106

92-
override fun onFailed(statusCode: Int, errorMessage: String?) {
93-
callback.failedResult(statusCode, errorMessage)
94-
}
95-
})
107+
override fun onFailed(statusCode: Int, errorMessage: String?) {
108+
callback.failedResult(statusCode, errorMessage)
109+
}
110+
})
96111
}
97112

98-
override fun listAllCateories(callback: MealResultCallback<CategoriesList>) {
99-
repository.listAllCateories(apiKey, object : MealDataSource.GetRemoteCallback<CategoriesList> {
100-
override fun onSuccess(data: CategoriesList) {
101-
callback.getResultData(data)
102-
}
113+
override fun listAllCateories(callback: MealResultCallback<MealResponse<Category>>) {
114+
repository.listAllCateories(
115+
apiKey,
116+
object : MealDataSource.GetRemoteCallback<MealResponse<Category>> {
117+
override fun onSuccess(data: MealResponse<Category>) {
118+
callback.getResultData(data)
119+
}
103120

104-
override fun onFailed(statusCode: Int, errorMessage: String?) {
105-
callback.failedResult(statusCode, errorMessage)
106-
}
107-
})
121+
override fun onFailed(statusCode: Int, errorMessage: String?) {
122+
callback.failedResult(statusCode, errorMessage)
123+
}
124+
})
108125
}
109126

110-
override fun listAllArea(callback: MealResultCallback<Areas>) {
111-
repository.listAllArea(apiKey, object : MealDataSource.GetRemoteCallback<Areas> {
112-
override fun onSuccess(data: Areas) {
113-
callback.getResultData(data)
114-
}
127+
override fun listAllArea(callback: MealResultCallback<MealResponse<Area>>) {
128+
repository.listAllArea(
129+
apiKey,
130+
object : MealDataSource.GetRemoteCallback<MealResponse<Area>> {
131+
override fun onSuccess(data: MealResponse<Area>) {
132+
callback.getResultData(data)
133+
}
115134

116-
override fun onFailed(statusCode: Int, errorMessage: String?) {
117-
callback.failedResult(statusCode, errorMessage)
118-
}
119-
})
135+
override fun onFailed(statusCode: Int, errorMessage: String?) {
136+
callback.failedResult(statusCode, errorMessage)
137+
}
138+
})
120139
}
121140

122-
override fun listAllIngredients(callback: MealResultCallback<Ingredients>) {
123-
repository.listAllIngredients(apiKey, object : MealDataSource.GetRemoteCallback<Ingredients> {
124-
override fun onSuccess(data: Ingredients) {
125-
callback.getResultData(data)
126-
}
141+
override fun listAllIngredients(callback: MealResultCallback<MealResponse<Ingredient>>) {
142+
repository.listAllIngredients(
143+
apiKey,
144+
object : MealDataSource.GetRemoteCallback<MealResponse<Ingredient>> {
145+
override fun onSuccess(data: MealResponse<Ingredient>) {
146+
callback.getResultData(data)
147+
}
127148

128-
override fun onFailed(statusCode: Int, errorMessage: String?) {
129-
callback.failedResult(statusCode, errorMessage)
130-
}
131-
})
149+
override fun onFailed(statusCode: Int, errorMessage: String?) {
150+
callback.failedResult(statusCode, errorMessage)
151+
}
152+
})
153+
}
154+
155+
override fun filterByIngredient(
156+
ingredient: String,
157+
callback: MealResultCallback<MealResponse<MealFilter>>
158+
) {
159+
repository.filterByIngredient(
160+
apiKey,
161+
ingredient,
162+
object : MealDataSource.GetRemoteCallback<MealResponse<MealFilter>> {
163+
override fun onSuccess(data: MealResponse<MealFilter>) {
164+
callback.getResultData(data)
165+
}
166+
167+
override fun onFailed(statusCode: Int, errorMessage: String?) {
168+
callback.failedResult(statusCode, errorMessage)
169+
}
170+
})
132171
}
133172
}

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/ConsumeMealApiView.kt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package com.frogobox.frogothemealdbapi
22

33
import android.content.Context
44
import com.frogobox.frogothemealdbapi.callback.MealResultCallback
5+
import com.frogobox.frogothemealdbapi.data.model.*
56
import com.frogobox.frogothemealdbapi.data.response.*
6-
import com.frogobox.frogothemealdbapi.data.source.MealDataSource
77

88
/**
99
* Created by Faisal Amir
@@ -28,28 +28,30 @@ interface ConsumeMealApiView {
2828
fun usingChuckInterceptor(context: Context)
2929

3030
// Search meal by name
31-
fun searchMeal(mealName: String, callback: MealResultCallback<Meals>)
31+
fun searchMeal(mealName: String, callback: MealResultCallback<MealResponse<Meal>>)
3232

3333
// List all meals by first letter
34-
fun listAllMeal(firstLetter: String, callback: MealResultCallback<Meals>)
34+
fun listAllMeal(firstLetter: String, callback: MealResultCallback<MealResponse<Meal>>)
3535

3636
// Lookup full meal details by id
37-
fun lookupFullMeal(idMeal: String, callback: MealResultCallback<Meals>)
37+
fun lookupFullMeal(idMeal: String, callback: MealResultCallback<MealResponse<Meal>>)
3838

3939
// Lookup a single random meal
40-
fun lookupRandomMeal(callback: MealResultCallback<Meals>)
40+
fun lookupRandomMeal(callback: MealResultCallback<MealResponse<Meal>>)
4141

4242
// List all meal categories
43-
fun listMealCategories(callback: MealResultCallback<Categories>)
43+
fun listMealCategories(callback: MealResultCallback<CategoryResponse>)
4444

4545
// List all Categories
46-
fun listAllCateories(callback: MealResultCallback<CategoriesList>)
46+
fun listAllCateories(callback: MealResultCallback<MealResponse<Category>>)
4747

4848
// List all Area
49-
fun listAllArea(callback: MealResultCallback<Areas>)
49+
fun listAllArea(callback: MealResultCallback<MealResponse<Area>>)
5050

5151
// List all Ingredients
52-
fun listAllIngredients(callback: MealResultCallback<Ingredients>)
52+
fun listAllIngredients(callback: MealResultCallback<MealResponse<Ingredient>>)
5353

54+
// Filter by main ingredient
55+
fun filterByIngredient(ingredient: String, callback: MealResultCallback<MealResponse<MealFilter>>)
5456

5557
}

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/response/Areas.kt renamed to frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/model/MealFilter.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
package com.frogobox.frogothemealdbapi.data.response
1+
package com.frogobox.frogothemealdbapi.data.model
22

3-
import com.frogobox.frogothemealdbapi.data.model.Area
4-
import com.frogobox.frogothemealdbapi.data.model.Category
53
import com.google.gson.annotations.SerializedName
64

75
/**
@@ -18,12 +16,18 @@ import com.google.gson.annotations.SerializedName
1816
* LinkedIn : linkedin.com/in/faisalamircs
1917
* -----------------------------------------
2018
* FrogoBox Software Industries
21-
* com.frogobox.frogothemealdbapi.data.response
19+
* com.frogobox.frogothemealdbapi.data.model
2220
*
2321
*/
24-
data class Areas(
22+
data class MealFilter(
2523

26-
@SerializedName("meals")
27-
var meals: List<Area>? = null
24+
@SerializedName("strMeal")
25+
var strMeal: String? = null,
26+
27+
@SerializedName("strMealThumb")
28+
var strMealThumb: String? = null,
29+
30+
@SerializedName("idMeal")
31+
var idMeal: String? = null
2832

2933
)

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/response/Categories.kt renamed to frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/response/CategoryResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import com.google.gson.annotations.SerializedName
2020
* com.frogobox.frogothemealdbapi.data.response
2121
*
2222
*/
23-
data class Categories(
23+
data class CategoryResponse(
2424

2525
@SerializedName("categories")
2626
var categories: List<Category>? = null

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/response/Ingredients.kt

Lines changed: 0 additions & 28 deletions
This file was deleted.

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/response/CategoriesList.kt renamed to frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/response/MealResponse.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.frogobox.frogothemealdbapi.data.response
22

3-
import com.frogobox.frogothemealdbapi.data.model.Category
43
import com.google.gson.annotations.SerializedName
54

65
/**
@@ -20,9 +19,9 @@ import com.google.gson.annotations.SerializedName
2019
* com.frogobox.frogothemealdbapi.data.response
2120
*
2221
*/
23-
data class CategoriesList(
22+
data class MealResponse<T> (
2423

2524
@SerializedName("meals")
26-
var meals: List<Category>? = null
25+
var meals: List<T>? = null
2726

2827
)

0 commit comments

Comments
 (0)