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

Commit 02320a6

Browse files
committed
add: filter category and area
1 parent 9202556 commit 02320a6

File tree

7 files changed

+130
-5
lines changed

7 files changed

+130
-5
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package com.frogobox.themealsapi
22

33
import android.os.Bundle
4+
import android.widget.Toast
45
import androidx.appcompat.app.AppCompatActivity
56
import com.frogobox.frogothemealdbapi.ConsumeMealApi
67
import com.frogobox.frogothemealdbapi.callback.MealResultCallback
78
import com.frogobox.frogothemealdbapi.data.model.Category
89
import com.frogobox.frogothemealdbapi.data.response.MealResponse
910

1011
class MainActivity : AppCompatActivity() {
11-
12+
1213
override fun onCreate(savedInstanceState: Bundle?) {
1314
super.onCreate(savedInstanceState)
1415
setContentView(R.layout.activity_main)
@@ -19,12 +20,12 @@ class MainActivity : AppCompatActivity() {
1920
consumeMealApi.listAllCateories(object : MealResultCallback<MealResponse<Category>> {
2021
override fun getResultData(data: MealResponse<Category>) {
2122
for (i in data.meals!!.indices) {
22-
23+
Toast.makeText(this@MainActivity, data.meals!![i].strCategory, Toast.LENGTH_SHORT).show()
2324
}
2425
}
2526

2627
override fun failedResult(statusCode: Int, errorMessage: String?) {
27-
TODO("Not yet implemented")
28+
Toast.makeText(this@MainActivity, errorMessage, Toast.LENGTH_SHORT).show()
2829
}
2930
})
3031

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,40 @@ class ConsumeMealApi(private val apiKey: String) : ConsumeMealApiView {
169169
}
170170
})
171171
}
172+
173+
override fun filterByCategory(
174+
category: String,
175+
callback: MealResultCallback<MealResponse<MealFilter>>
176+
) {
177+
repository.filterByCategory(
178+
apiKey,
179+
category,
180+
object : MealDataSource.GetRemoteCallback<MealResponse<MealFilter>> {
181+
override fun onSuccess(data: MealResponse<MealFilter>) {
182+
callback.getResultData(data)
183+
}
184+
185+
override fun onFailed(statusCode: Int, errorMessage: String?) {
186+
callback.failedResult(statusCode, errorMessage)
187+
}
188+
})
189+
}
190+
191+
override fun filterByArea(
192+
area: String,
193+
callback: MealResultCallback<MealResponse<MealFilter>>
194+
) {
195+
repository.filterByArea(
196+
apiKey,
197+
area,
198+
object : MealDataSource.GetRemoteCallback<MealResponse<MealFilter>> {
199+
override fun onSuccess(data: MealResponse<MealFilter>) {
200+
callback.getResultData(data)
201+
}
202+
203+
override fun onFailed(statusCode: Int, errorMessage: String?) {
204+
callback.failedResult(statusCode, errorMessage)
205+
}
206+
})
207+
}
172208
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ package com.frogobox.frogothemealdbapi
33
import android.content.Context
44
import com.frogobox.frogothemealdbapi.callback.MealResultCallback
55
import com.frogobox.frogothemealdbapi.data.model.*
6-
import com.frogobox.frogothemealdbapi.data.response.*
6+
import com.frogobox.frogothemealdbapi.data.response.CategoryResponse
7+
import com.frogobox.frogothemealdbapi.data.response.MealResponse
78

89
/**
910
* Created by Faisal Amir
@@ -54,4 +55,10 @@ interface ConsumeMealApiView {
5455
// Filter by main ingredient
5556
fun filterByIngredient(ingredient: String, callback: MealResultCallback<MealResponse<MealFilter>>)
5657

58+
// Filter by Category
59+
fun filterByCategory(category: String, callback: MealResultCallback<MealResponse<MealFilter>>)
60+
61+
// Filter by Area
62+
fun filterByArea(area: String, callback: MealResultCallback<MealResponse<MealFilter>>)
63+
5764
}

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/source/MealApiService.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package com.frogobox.frogothemealdbapi.data.source
22

33
import android.content.Context
44
import com.frogobox.frogothemealdbapi.data.model.*
5-
import com.frogobox.frogothemealdbapi.data.response.*
5+
import com.frogobox.frogothemealdbapi.data.response.CategoryResponse
6+
import com.frogobox.frogothemealdbapi.data.response.MealResponse
67
import com.frogobox.frogothemealdbapi.util.MealConstant
78
import com.frogobox.frogothemealdbapi.util.MealUrl
89
import com.readystatesoftware.chuck.ChuckInterceptor
@@ -97,6 +98,18 @@ interface MealApiService {
9798
@Query(MealConstant.QUERY_INGREDIENT) ingredient: String
9899
): Observable<MealResponse<MealFilter>>
99100

101+
// Filter by Category
102+
fun filterByCategory(
103+
@Path(MealConstant.PATH_API_KEY) apiKey: String,
104+
@Query(MealConstant.QUERY_CATEGORY) category: String
105+
): Observable<MealResponse<MealFilter>>
106+
107+
// Filter by Area
108+
fun filterByArea(
109+
@Path(MealConstant.PATH_API_KEY) apiKey: String,
110+
@Query(MealConstant.QUERY_AREA) area: String
111+
): Observable<MealResponse<MealFilter>>
112+
100113
companion object Factory {
101114

102115
private var isUsingChuckInterceptor = false

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/source/MealDataSource.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ interface MealDataSource {
5454
// Filter by main ingredient
5555
fun filterByIngredient(apiKey: String, ingredient: String, callback: GetRemoteCallback<MealResponse<MealFilter>>)
5656

57+
// Filter by Category
58+
fun filterByCategory(apiKey: String, category: String, callback: GetRemoteCallback<MealResponse<MealFilter>>)
59+
60+
// Filter by Area
61+
fun filterByArea(apiKey: String, area: String, callback: GetRemoteCallback<MealResponse<MealFilter>>)
62+
5763
// Response Callback
5864
interface GetRemoteCallback<T> : BaseMealDataSource.ResponseCallback<T>
5965

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/source/MealRemoteDataSource.kt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,4 +234,50 @@ object MealRemoteDataSource : MealDataSource {
234234
}
235235
})
236236
}
237+
238+
override fun filterByCategory(
239+
apiKey: String,
240+
category: String,
241+
callback: MealDataSource.GetRemoteCallback<MealResponse<MealFilter>>
242+
) {
243+
mealApiService.getApiService
244+
.filterByCategory(apiKey, category)
245+
.subscribeOn(Schedulers.io())
246+
.observeOn(AndroidSchedulers.mainThread())
247+
.subscribe(object : MealApiCallback<MealResponse<MealFilter>>() {
248+
override fun onSuccess(data: MealResponse<MealFilter>) {
249+
callback.onSuccess(data)
250+
}
251+
252+
override fun onFailure(code: Int, errorMessage: String) {
253+
callback.onFailed(code, errorMessage)
254+
}
255+
256+
override fun onFinish() {
257+
}
258+
})
259+
}
260+
261+
override fun filterByArea(
262+
apiKey: String,
263+
area: String,
264+
callback: MealDataSource.GetRemoteCallback<MealResponse<MealFilter>>
265+
) {
266+
mealApiService.getApiService
267+
.filterByArea(apiKey, area)
268+
.subscribeOn(Schedulers.io())
269+
.observeOn(AndroidSchedulers.mainThread())
270+
.subscribe(object : MealApiCallback<MealResponse<MealFilter>>() {
271+
override fun onSuccess(data: MealResponse<MealFilter>) {
272+
callback.onSuccess(data)
273+
}
274+
275+
override fun onFailure(code: Int, errorMessage: String) {
276+
callback.onFailed(code, errorMessage)
277+
}
278+
279+
override fun onFinish() {
280+
}
281+
})
282+
}
237283
}

frogothemealdbapi/src/main/java/com/frogobox/frogothemealdbapi/data/source/MealRepository.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,20 @@ class MealRepository(private val remoteDataSource: MealRemoteDataSource) : MealD
9393
) {
9494
remoteDataSource.filterByIngredient(apiKey, ingredient, callback)
9595
}
96+
97+
override fun filterByCategory(
98+
apiKey: String,
99+
category: String,
100+
callback: MealDataSource.GetRemoteCallback<MealResponse<MealFilter>>
101+
) {
102+
remoteDataSource.filterByCategory(apiKey, category, callback)
103+
}
104+
105+
override fun filterByArea(
106+
apiKey: String,
107+
area: String,
108+
callback: MealDataSource.GetRemoteCallback<MealResponse<MealFilter>>
109+
) {
110+
remoteDataSource.filterByArea(apiKey, area, callback)
111+
}
96112
}

0 commit comments

Comments
 (0)