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" > - - - - - - - - + />