Add and remove favorite food function

This commit is contained in:
Nezumi
2023-03-17 20:25:59 +07:00
parent 6edab4ec77
commit c65ff2b207
11 changed files with 112 additions and 62 deletions
@@ -3,7 +3,7 @@ package com.capstone.foodify.API;
import com.capstone.foodify.Model.Category;
import com.capstone.foodify.Model.DistrictWardResponse;
import com.capstone.foodify.Model.Food;
import com.capstone.foodify.Model.Response.EmailOrPhoneExist;
import com.capstone.foodify.Model.Response.CustomResponse;
import com.capstone.foodify.Model.Response.Foods;
import com.capstone.foodify.Model.Response.Shops;
import com.capstone.foodify.Model.Shop;
@@ -29,7 +29,7 @@ public interface FoodApi {
Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss dd-MM-yyyy").setLenient().create();
FoodApi apiService = new Retrofit.Builder()
.baseUrl("http://192.168.1.88:8080/api/").addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl("http://192.168.1.183:8080/api/").addConverterFactory(GsonConverterFactory.create(gson))
.build()
.create(FoodApi.class);
@@ -77,5 +77,5 @@ public interface FoodApi {
Call<User> register(@Body User user);
@POST("auth/check")
Call<EmailOrPhoneExist> checkEmailOrPhoneExist (@Body User user);
Call<CustomResponse> checkEmailOrPhoneExist (@Body User user);
}
@@ -5,6 +5,7 @@ import static com.capstone.foodify.Common.TOKEN;
import androidx.annotation.NonNull;
import com.capstone.foodify.Model.Food;
import com.capstone.foodify.Model.Response.CustomResponse;
import com.capstone.foodify.Model.Response.Foods;
import com.capstone.foodify.Model.User;
import com.google.gson.Gson;
@@ -29,7 +30,7 @@ import retrofit2.http.Path;
import retrofit2.http.Query;
public interface FoodApiToken {
Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss dd-MM-yyyy").create();
Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss dd-MM-yyyy").setLenient().create();
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@NonNull
@@ -43,7 +44,7 @@ public interface FoodApiToken {
FoodApiToken apiService = new Retrofit.Builder()
.client(client)
.baseUrl("http://192.168.1.88:8080/api/").addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl("http://192.168.1.183:8080/api/").addConverterFactory(GsonConverterFactory.create(gson))
.build()
.create(FoodApiToken.class);
@@ -62,4 +63,7 @@ public interface FoodApiToken {
@PUT("users/{userId}")
Call<User> updateUser(@Path("userId") int userId, @Body User user);
@GET("users/{userId}/loves/{productId}")
Call<CustomResponse> checkFoodIsFavorite(@Path("userId") int userId, @Path("productId") int productId);
}
@@ -27,6 +27,7 @@ import com.capstone.foodify.Common;
import com.capstone.foodify.Model.Basket;
import com.capstone.foodify.Model.Food;
import com.capstone.foodify.Model.Image;
import com.capstone.foodify.Model.Response.CustomResponse;
import com.capstone.foodify.Model.Review;
import com.capstone.foodify.Adapter.ReviewAdapter;
import com.capstone.foodify.R;
@@ -51,7 +52,7 @@ public class FoodDetailActivity extends AppCompatActivity {
private HorizontalQuantitizer horizontalQuantitizer;
private ImageSlider imageSlider;
private ImageView back_image, favorite_icon;
private ImageView back_image, not_favorite, is_favorite;
private String foodId = "";
private Food food;
private TextView foodName_txt, shopName_txt, discount_txt, price_txt, total_txt, countRating_txt, description_content_txt;
@@ -78,7 +79,8 @@ public class FoodDetailActivity extends AppCompatActivity {
discount_txt = findViewById(R.id.discount);
price_txt = findViewById(R.id.price);
add_to_basket_button = findViewById(R.id.add_to_basket_button);
favorite_icon = findViewById(R.id.favorite_icon);
not_favorite = findViewById(R.id.not_favorite);
is_favorite = findViewById(R.id.is_favorite);
total_txt = findViewById(R.id.total_text_view);
countRating_txt = findViewById(R.id.count_rating_text_view);
description_content_txt = findViewById(R.id.content_description_text_view);
@@ -161,14 +163,30 @@ public class FoodDetailActivity extends AppCompatActivity {
});
//Add food to favorite when user on click
favorite_icon.setOnClickListener(new View.OnClickListener() {
not_favorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO Check food has been in favorite food or not
addFoodToFavorite();
}
});
//Remove food from favorite
is_favorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeFavoriteFood();
}
});
}
private void isFavoriteIcon(){
not_favorite.setVisibility(View.GONE);
is_favorite.setVisibility(View.VISIBLE);
}
private void notFavoriteIcon(){
not_favorite.setVisibility(View.VISIBLE);
is_favorite.setVisibility(View.GONE);
}
private void addFoodToFavorite() {
@@ -176,7 +194,7 @@ public class FoodDetailActivity extends AppCompatActivity {
@Override
public void onResponse(Call<Food> call, Response<Food> response) {
Toast.makeText(FoodDetailActivity.this, "Đã thêm " + food.getName() + " vào danh sách yêu thích!", Toast.LENGTH_SHORT).show();
favorite_icon.setImageResource(R.drawable.baseline_favorite_24);
isFavoriteIcon();
}
@Override
@@ -191,7 +209,7 @@ public class FoodDetailActivity extends AppCompatActivity {
@Override
public void onResponse(Call<Food> call, Response<Food> response) {
Toast.makeText(FoodDetailActivity.this, "Đã xoá " + food.getName() + " khỏi danh sách yêu thích!", Toast.LENGTH_SHORT).show();
favorite_icon.setImageResource(R.drawable.baseline_favorite_border_24);
notFavoriteIcon();
}
@Override
@@ -293,6 +311,32 @@ public class FoodDetailActivity extends AppCompatActivity {
}
}
private void checkFoodIsFavorite(int foodId){
FoodApiToken.apiService.checkFoodIsFavorite(Common.CURRENT_USER.getId(), foodId).enqueue(new Callback<CustomResponse>() {
@Override
public void onResponse(Call<CustomResponse> call, Response<CustomResponse> response) {
CustomResponse dataResponse = response.body();
boolean isFavorite = false;
if(dataResponse != null)
isFavorite = dataResponse.isTrue();
if(isFavorite)
isFavoriteIcon();
else
notFavoriteIcon();
showUI();
}
@Override
public void onFailure(Call<CustomResponse> call, Throwable t) {
Toast.makeText(FoodDetailActivity.this, "Oops, đã có lỗi xảy ra! Vui lòng thử lại sau!", Toast.LENGTH_SHORT).show();
}
});
}
private void getFoodById(String foodId) {
FoodApi.apiService.detailFood(foodId).enqueue(new Callback<Food>() {
@Override
@@ -302,7 +346,7 @@ public class FoodDetailActivity extends AppCompatActivity {
food = tempFood;
initData();
showUI();
checkFoodIsFavorite(Integer.parseInt(foodId));
}
@Override
@@ -15,6 +15,7 @@ import androidx.viewpager2.widget.ViewPager2;
import com.capstone.foodify.API.FoodApiToken;
import com.capstone.foodify.Common;
import com.capstone.foodify.Fragment.HomeFragment;
import com.capstone.foodify.Model.User;
import com.capstone.foodify.R;
import com.capstone.foodify.ViewPagerAdapter;
@@ -62,6 +63,7 @@ public class MainActivity extends AppCompatActivity {
User userData = response.body();
if(userData != null){
Common.CURRENT_USER = userData;
HomeFragment.setNameUser(Common.CURRENT_USER.getFullName());
}
}
@@ -9,8 +9,6 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
@@ -26,7 +24,7 @@ import com.capstone.foodify.API.FoodApi;
import com.capstone.foodify.Common;
import com.capstone.foodify.Model.Address;
import com.capstone.foodify.Model.DistrictWardResponse;
import com.capstone.foodify.Model.Response.EmailOrPhoneExist;
import com.capstone.foodify.Model.Response.CustomResponse;
import com.capstone.foodify.Model.User;
import com.capstone.foodify.R;
import com.google.android.material.button.MaterialButton;
@@ -174,10 +172,10 @@ public class SignUpActivity extends AppCompatActivity {
user.setPhoneNumber(phone);
user.setRoleName("ROLE_USER");
FoodApi.apiService.checkEmailOrPhoneExist(user).enqueue(new Callback<EmailOrPhoneExist>() {
FoodApi.apiService.checkEmailOrPhoneExist(user).enqueue(new Callback<CustomResponse>() {
@Override
public void onResponse(Call<EmailOrPhoneExist> call, Response<EmailOrPhoneExist> response) {
EmailOrPhoneExist dataTemp = response.body();
public void onResponse(Call<CustomResponse> call, Response<CustomResponse> response) {
CustomResponse dataTemp = response.body();
boolean isExist = false;
@@ -194,7 +192,7 @@ public class SignUpActivity extends AppCompatActivity {
}
@Override
public void onFailure(Call<EmailOrPhoneExist> call, Throwable t) {
public void onFailure(Call<CustomResponse> call, Throwable t) {
}
});
@@ -1,6 +1,7 @@
package com.capstone.foodify.Adapter;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -113,6 +114,16 @@ public class FoodFavoriteAdapter extends RecyclerView.Adapter<FoodFavoriteAdapt
Toast.makeText(context, "Đã thêm " + food.getName() + " vào giỏ hàng!", Toast.LENGTH_SHORT).show();
}
});
//Move to food detail when user click on item
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, FoodDetailActivity.class);
intent.putExtra("FoodId", food.getId());
context.startActivity(intent);
}
});
}
@Override
@@ -4,6 +4,7 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
@@ -47,6 +48,7 @@ public class HomeFragment extends Fragment {
private MenuAdapter menuAdapter;
private ShopAdapter shopAdapter;
private ConstraintLayout progressLayout;
private static TextView welcomeText;
@Override
@@ -61,6 +63,7 @@ public class HomeFragment extends Fragment {
recyclerView_restaurant = view.findViewById(R.id.recycler_view_restaurant);
shopAdapter = new ShopAdapter(getContext());
progressLayout = getActivity().findViewById(R.id.progress_layout);
welcomeText = view.findViewById(R.id.welcome_text);
if(listFood.isEmpty() || recentFood.isEmpty()){
@@ -89,6 +92,14 @@ public class HomeFragment extends Fragment {
System.out.println("Main activity destroy!");
}
public static void setNameUser(String name){
//Set name user while user already login
if(Common.CURRENT_USER != null)
welcomeText.setText("Xin chào, " + Common.CURRENT_USER.getFullName() + "!");
else
welcomeText.setText("Xin chào, khách!");
}
private void showSlider(){
FoodApi.apiService.listSlider().enqueue(new Callback<List<Slider>>() {
@@ -1,6 +1,6 @@
package com.capstone.foodify.Model.Response;
public class EmailOrPhoneExist {
public class CustomResponse {
private String title;
private boolean isTrue;