From a9b0ea500b7219520081a136345c8884576b57cd Mon Sep 17 00:00:00 2001 From: Nezumi <123229563+Nez27@users.noreply.github.com> Date: Fri, 3 Mar 2023 11:52:37 +0700 Subject: [PATCH] Show list favorite from api --- .../com/capstone/foodify/API/FoodApi.java | 12 ++++ .../foodify/Fragment/FavouriteFragment.java | 50 ++++++++++++----- .../com/capstone/foodify/Model/Food/Food.java | 11 +++- .../Model/Food/FoodFavoriteAdapter.java | 55 ++++++++++++++++++- 4 files changed, 111 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/capstone/foodify/API/FoodApi.java b/app/src/main/java/com/capstone/foodify/API/FoodApi.java index 1b760cb..b6d42de 100644 --- a/app/src/main/java/com/capstone/foodify/API/FoodApi.java +++ b/app/src/main/java/com/capstone/foodify/API/FoodApi.java @@ -12,7 +12,10 @@ import java.util.List; import retrofit2.Call; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; +import retrofit2.http.Body; +import retrofit2.http.DELETE; import retrofit2.http.GET; +import retrofit2.http.POST; import retrofit2.http.Path; import retrofit2.http.Query; @@ -55,4 +58,13 @@ public interface FoodApi { @GET("district") Call> districtResponse(); + + @GET("wishlist") + Call> getListFavoriteFood(); + + @POST("wishlist") + Call addFoodToFavorite(@Body Food food); + + @DELETE("wishlist/{id}") + Call removeFoodFromFavorite(@Path("id") int id); } diff --git a/app/src/main/java/com/capstone/foodify/Fragment/FavouriteFragment.java b/app/src/main/java/com/capstone/foodify/Fragment/FavouriteFragment.java index 0cbe6c4..5f5b39c 100644 --- a/app/src/main/java/com/capstone/foodify/Fragment/FavouriteFragment.java +++ b/app/src/main/java/com/capstone/foodify/Fragment/FavouriteFragment.java @@ -3,6 +3,7 @@ package com.capstone.foodify.Fragment; import android.graphics.Color; import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.core.widget.NestedScrollView; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.DividerItemDecoration; @@ -13,7 +14,9 @@ import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; +import com.capstone.foodify.API.FoodApi; import com.capstone.foodify.ItemTouchHelperListener; import com.capstone.foodify.Model.Food.Food; import com.capstone.foodify.Model.Food.FoodFavoriteAdapter; @@ -22,14 +25,21 @@ import com.capstone.foodify.RecyclerViewItemTouchHelper; import com.google.android.material.snackbar.Snackbar; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Objects; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + public class FavouriteFragment extends Fragment implements ItemTouchHelperListener { private RecyclerView recyclerView_favorite_food; private FoodFavoriteAdapter adapter; - private List listFavoriteFood = new ArrayList<>(); + private final List listFavoriteFood = new ArrayList<>(); private NestedScrollView listFavoriteFoodView; @Override @@ -41,12 +51,14 @@ public class FavouriteFragment extends Fragment implements ItemTouchHelperListen recyclerView_favorite_food = rootView.findViewById(R.id.recycler_view_favorite_food); listFavoriteFoodView = rootView.findViewById(R.id.list_favorite_food_view); + //Get list favorite food + getListFavoriteFood(); + + //Set layout recyclerview LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); recyclerView_favorite_food.setLayoutManager(linearLayoutManager); + adapter = new FoodFavoriteAdapter(); - listFavoriteFood = getListFavoriteFood(); - adapter = new FoodFavoriteAdapter(getListFavoriteFood()); - recyclerView_favorite_food.setAdapter(adapter); RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL); recyclerView_favorite_food.addItemDecoration(itemDecoration); @@ -56,14 +68,26 @@ public class FavouriteFragment extends Fragment implements ItemTouchHelperListen return rootView; } - private List getListFavoriteFood() { - List listFoodTemp = new ArrayList<>(); + private void getListFavoriteFood() { + //Get data from api + FoodApi.apiService.getListFavoriteFood().enqueue(new Callback>() { + @Override + public void onResponse(@NonNull Call> call, @NonNull Response> response) { + List listFoodData = response.body(); + if(listFoodData != null){ + listFavoriteFood.addAll(listFoodData); + } + Collections.sort(listFavoriteFood); - for(int i = 1; i <= 20; i++){ - listFoodTemp.add(new Food(String.valueOf(i), "https://cdn.netspace.edu.vn/images/2022/09/29/hoc-nau-mi-quang-1-1024.jpg", "Food "+ i, "25000", "Shop " + i)); - } + adapter.setData(listFavoriteFood); + recyclerView_favorite_food.setAdapter(adapter); + } - return listFoodTemp; + @Override + public void onFailure(Call> call, Throwable t) { + Toast.makeText(getContext(), "Error: " + t, Toast.LENGTH_SHORT).show(); + } + }); } @Override @@ -75,14 +99,14 @@ public class FavouriteFragment extends Fragment implements ItemTouchHelperListen int indexDelete = viewHolder.getAdapterPosition(); //Remove Item - adapter.removeItem(indexDelete); + adapter.removeItem(indexDelete, getContext()); //Show notification food has been delete - Snackbar snackbar = Snackbar.make(listFavoriteFoodView, foodNameDelete + "remove!", Snackbar.LENGTH_LONG); + Snackbar snackbar = Snackbar.make(listFavoriteFoodView, foodNameDelete + " remove!", Snackbar.LENGTH_LONG); snackbar.setAction("Undo", new View.OnClickListener() { @Override public void onClick(View view) { - adapter.undoItem(foodDelete, indexDelete); + adapter.undoItem(foodDelete, indexDelete, getContext()); } }); snackbar.setActionTextColor(Color.YELLOW); diff --git a/app/src/main/java/com/capstone/foodify/Model/Food/Food.java b/app/src/main/java/com/capstone/foodify/Model/Food/Food.java index 518d1e4..e880dc6 100644 --- a/app/src/main/java/com/capstone/foodify/Model/Food/Food.java +++ b/app/src/main/java/com/capstone/foodify/Model/Food/Food.java @@ -1,6 +1,6 @@ package com.capstone.foodify.Model.Food; -public class Food { +public class Food implements Comparable{ private String id; private String img; private String name; @@ -84,4 +84,13 @@ public class Food { public void setShopName(String shopName) { this.shopName = shopName; } + + + @Override + public int compareTo(Food food) { + if(getName().isEmpty() || food.getName().isEmpty()){ + return 0; + } + return getName().compareTo(food.getName()); + } } diff --git a/app/src/main/java/com/capstone/foodify/Model/Food/FoodFavoriteAdapter.java b/app/src/main/java/com/capstone/foodify/Model/Food/FoodFavoriteAdapter.java index f0c73ee..c2cc565 100644 --- a/app/src/main/java/com/capstone/foodify/Model/Food/FoodFavoriteAdapter.java +++ b/app/src/main/java/com/capstone/foodify/Model/Food/FoodFavoriteAdapter.java @@ -1,26 +1,39 @@ package com.capstone.foodify.Model.Food; +import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.cardview.widget.CardView; import androidx.recyclerview.widget.RecyclerView; +import com.capstone.foodify.API.FoodApi; import com.capstone.foodify.R; import com.squareup.picasso.Picasso; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + public class FoodFavoriteAdapter extends RecyclerView.Adapter { private List listFavoriteFood; - public FoodFavoriteAdapter(List listFavoriteFood) { + public FoodFavoriteAdapter(){} + + public void setData(List listFavoriteFood){ this.listFavoriteFood = listFavoriteFood; } @NonNull @@ -69,13 +82,49 @@ public class FoodFavoriteAdapter extends RecyclerView.Adapter() { + @Override + public void onResponse(Call call, Response response) { + Toast.makeText(context, "Remove successful!", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(context, "Error: " + t, Toast.LENGTH_SHORT).show(); + } + }); } - public void undoItem(Food food, int index){ + public void undoItem(Food food, int index, Context context){ listFavoriteFood.add(index, food); notifyItemInserted(index); + + FoodApi.apiService.addFoodToFavorite(food).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + Toast.makeText(context, "Add successful!", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(context, "Error: " + t, Toast.LENGTH_SHORT).show(); + } + }); + } + + private String convertFromStringToJson(Food foodDelete) throws JSONException { + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", foodDelete.getId()); + jsonObject.put("name", foodDelete.getName()); + jsonObject.put("img", foodDelete.getImg()); + jsonObject.put("price", foodDelete.getPrice()); + jsonObject.put("shopName", foodDelete.getShopName()); + + return jsonObject.toString(); } }