diff --git a/.idea/misc.xml b/.idea/misc.xml
index 5ce80eb..7115e4c 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -15,6 +15,7 @@
+
diff --git a/app/src/main/java/com/example/foodies/SearchFragment.kt b/app/src/main/java/com/example/foodies/SearchFragment.kt
new file mode 100644
index 0000000..7449f60
--- /dev/null
+++ b/app/src/main/java/com/example/foodies/SearchFragment.kt
@@ -0,0 +1,72 @@
+package com.example.foodies
+
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.activityViewModels
+import androidx.fragment.app.viewModels
+import androidx.lifecycle.Observer
+import coil.load
+import com.example.foodies.activities.MealActivity
+import com.example.foodies.databinding.FragmentSearchBinding
+import com.example.foodies.fragments.home.HomeFragment
+import com.example.foodies.viewmodel.SearchViewModel
+
+
+class SearchFragment : Fragment() {
+ private lateinit var binding: FragmentSearchBinding
+ private val viewModel: SearchViewModel by viewModels()
+ private var mealId = ""
+ private var mealStr = ""
+ private var mealThumb = ""
+
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+ binding = FragmentSearchBinding.inflate(inflater, container, false)
+
+
+ observeSearched()
+ setOnMealCardClick()
+ return binding.root
+ }
+
+ private fun setOnMealCardClick() {
+ binding.searchedMealCard.setOnClickListener {
+ val intent = Intent(activity, MealActivity::class.java)
+ intent.putExtra(HomeFragment.MEAL_ID, mealId)
+ intent.putExtra(HomeFragment.MEAL_NAME, mealStr)
+ intent.putExtra(HomeFragment.MEAL_THUMB, mealThumb)
+
+ startActivity(intent)
+ }
+ }
+
+ private fun observeSearched() {
+ binding.icSearch.setOnClickListener {
+ onSearchClick()
+ viewModel.searchedMeal.observe(viewLifecycleOwner, Observer {
+ binding.apply {
+ imgSearchedMeal.load(it.strMealThumb)
+ tvSearchedMeal.text = it.strMeal
+ searchedMealCard.visibility = View.VISIBLE
+ }
+ mealId = it.idMeal
+ mealStr = it.strMeal!!
+ mealThumb = it.strMealThumb!!
+ })
+ }
+ }
+
+ private fun onSearchClick() {
+ viewModel.getSearchedMeal(binding.edSearch.text.toString(), requireContext())
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/foodies/fragments/home/HomeFragment.kt b/app/src/main/java/com/example/foodies/fragments/home/HomeFragment.kt
index 6652125..59dfaa0 100644
--- a/app/src/main/java/com/example/foodies/fragments/home/HomeFragment.kt
+++ b/app/src/main/java/com/example/foodies/fragments/home/HomeFragment.kt
@@ -11,9 +11,11 @@ import androidx.core.content.ContextCompat.startActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
+import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import coil.load
+import com.example.foodies.R
import com.example.foodies.activities.CategoriesActivity
import com.example.foodies.activities.MealActivity
import com.example.foodies.adapters.CategoriesAdapter
@@ -74,6 +76,14 @@ class HomeFragment : Fragment() {
onPopularItemLongClick()
+ onSearchIconClicked()
+
+ }
+
+ private fun onSearchIconClicked() {
+ binding.iconSearch.setOnClickListener {
+ findNavController().navigate(R.id.action_homeFragment_to_searchFragment)
+ }
}
private fun onPopularItemLongClick() {
diff --git a/app/src/main/java/com/example/foodies/network/MealApiService.kt b/app/src/main/java/com/example/foodies/network/MealApiService.kt
index b17f896..6a01820 100644
--- a/app/src/main/java/com/example/foodies/network/MealApiService.kt
+++ b/app/src/main/java/com/example/foodies/network/MealApiService.kt
@@ -30,8 +30,8 @@ interface MealsApi {
@GET("categories.php")
fun getCategories(): Call
- @GET("filter.php")
- fun getMealsByCategory(@Query("c") category: String): Call
+ @GET("search.php?")
+ fun getMealBySearch(@Query("s") s:String):Call
}
diff --git a/app/src/main/java/com/example/foodies/viewmodel/CategoriesViewModel.kt b/app/src/main/java/com/example/foodies/viewmodel/CategoriesViewModel.kt
index cb14169..f667d00 100644
--- a/app/src/main/java/com/example/foodies/viewmodel/CategoriesViewModel.kt
+++ b/app/src/main/java/com/example/foodies/viewmodel/CategoriesViewModel.kt
@@ -18,7 +18,7 @@ class CategoriesViewModel: ViewModel() {
val meals: LiveData> = _meals
fun getMealsByCategory(category: String) {
- MealApiService.retrofitInstance.getMealsByCategory(category).enqueue(object : Callback {
+ MealApiService.retrofitInstance.getPopularItems(category).enqueue(object : Callback {
override fun onResponse(
call: Call,
response: Response
diff --git a/app/src/main/java/com/example/foodies/viewmodel/SearchViewModel.kt b/app/src/main/java/com/example/foodies/viewmodel/SearchViewModel.kt
new file mode 100644
index 0000000..39f8077
--- /dev/null
+++ b/app/src/main/java/com/example/foodies/viewmodel/SearchViewModel.kt
@@ -0,0 +1,38 @@
+package com.example.foodies.viewmodel
+
+import android.content.Context
+import android.util.Log
+import android.widget.Toast
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import com.example.foodies.module.randommeal.Meal
+import com.example.foodies.module.randommeal.RandomMeal
+import com.example.foodies.network.MealApiService
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
+
+class SearchViewModel: ViewModel() {
+
+ private var _searchedMeal = MutableLiveData()
+ val searchedMeal: LiveData = _searchedMeal
+
+
+ fun getSearchedMeal(search: String, context: Context) {
+ MealApiService.retrofitInstance.getMealBySearch(search).enqueue(object : Callback {
+ override fun onResponse(call: Call, response: Response) {
+ if (response.body()?.meals == null) {
+ Toast.makeText(context, "No Such Such Dish Found", Toast.LENGTH_SHORT)
+ } else {
+ _searchedMeal.value = response.body()!!.meals.first()
+ }
+ }
+
+ override fun onFailure(call: Call, t: Throwable) {
+ Log.e("TAG", t.message.toString())
+ }
+
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/search_box_background.xml b/app/src/main/res/drawable/search_box_background.xml
new file mode 100644
index 0000000..6944719
--- /dev/null
+++ b/app/src/main/res/drawable/search_box_background.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml
new file mode 100644
index 0000000..8cc402e
--- /dev/null
+++ b/app/src/main/res/layout/fragment_search.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index abb902f..7cc3496 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -9,7 +9,11 @@
android:id="@+id/homeFragment"
android:name="com.example.foodies.fragments.home.HomeFragment"
android:label="Home"
- tools:layout="@layout/fragment_home" />
+ tools:layout="@layout/fragment_home" >
+
+
+
\ No newline at end of file