diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ba6a1c..8ded76a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,7 +31,6 @@
register(@Body User user);
@POST("auth/check")
- Call checkEmailOrPhoneExist (@Body User user);
+ Call checkEmailOrPhoneExist (@Body User user);
}
diff --git a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
index 27f839d..a4a29b5 100644
--- a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
+++ b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
@@ -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 updateUser(@Path("userId") int userId, @Body User user);
+
+ @GET("users/{userId}/loves/{productId}")
+ Call checkFoodIsFavorite(@Path("userId") int userId, @Path("productId") int productId);
}
diff --git a/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java b/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java
index 4703194..b8395bf 100644
--- a/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java
+++ b/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java
@@ -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 call, Response 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 call, Response 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() {
+ @Override
+ public void onResponse(Call call, Response 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 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() {
@Override
@@ -302,7 +346,7 @@ public class FoodDetailActivity extends AppCompatActivity {
food = tempFood;
initData();
- showUI();
+ checkFoodIsFavorite(Integer.parseInt(foodId));
}
@Override
diff --git a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
index 8a7166e..8268a46 100644
--- a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
+++ b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
@@ -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());
}
}
diff --git a/app/src/main/java/com/capstone/foodify/Activity/SignUpActivity.java b/app/src/main/java/com/capstone/foodify/Activity/SignUpActivity.java
index 5a0e21f..01cca39 100644
--- a/app/src/main/java/com/capstone/foodify/Activity/SignUpActivity.java
+++ b/app/src/main/java/com/capstone/foodify/Activity/SignUpActivity.java
@@ -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() {
+ FoodApi.apiService.checkEmailOrPhoneExist(user).enqueue(new Callback() {
@Override
- public void onResponse(Call call, Response response) {
- EmailOrPhoneExist dataTemp = response.body();
+ public void onResponse(Call call, Response response) {
+ CustomResponse dataTemp = response.body();
boolean isExist = false;
@@ -194,7 +192,7 @@ public class SignUpActivity extends AppCompatActivity {
}
@Override
- public void onFailure(Call call, Throwable t) {
+ public void onFailure(Call call, Throwable t) {
}
});
diff --git a/app/src/main/java/com/capstone/foodify/Adapter/FoodFavoriteAdapter.java b/app/src/main/java/com/capstone/foodify/Adapter/FoodFavoriteAdapter.java
index 9e53ead..230b3fa 100644
--- a/app/src/main/java/com/capstone/foodify/Adapter/FoodFavoriteAdapter.java
+++ b/app/src/main/java/com/capstone/foodify/Adapter/FoodFavoriteAdapter.java
@@ -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>() {
diff --git a/app/src/main/java/com/capstone/foodify/Model/Response/EmailOrPhoneExist.java b/app/src/main/java/com/capstone/foodify/Model/Response/CustomResponse.java
similarity index 91%
rename from app/src/main/java/com/capstone/foodify/Model/Response/EmailOrPhoneExist.java
rename to app/src/main/java/com/capstone/foodify/Model/Response/CustomResponse.java
index 24a0e09..e4930d1 100644
--- a/app/src/main/java/com/capstone/foodify/Model/Response/EmailOrPhoneExist.java
+++ b/app/src/main/java/com/capstone/foodify/Model/Response/CustomResponse.java
@@ -1,6 +1,6 @@
package com.capstone.foodify.Model.Response;
-public class EmailOrPhoneExist {
+public class CustomResponse {
private String title;
private boolean isTrue;
diff --git a/app/src/main/res/layout/activity_food_detail.xml b/app/src/main/res/layout/activity_food_detail.xml
index a4bf394..bb14ffd 100644
--- a/app/src/main/res/layout/activity_food_detail.xml
+++ b/app/src/main/res/layout/activity_food_detail.xml
@@ -97,13 +97,22 @@
android:layout_gravity="right"
/>
+
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 1362308..5901e59 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -21,49 +21,21 @@
app:layout_constraintTop_toTopOf="parent"
>
-
-
-
-
-
-
-
-
+ />