mirror of
https://github.com/Nezumi-2711/Foodify.git
synced 2026-09-22 13:38:41 +00:00
Change position favorite screen
This commit is contained in:
Generated
+2
-1
@@ -1,6 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
|
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
||||||
@@ -24,14 +24,16 @@
|
|||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:usesCleartextTraffic="true"
|
|
||||||
android:theme="@style/Theme.Foodify"
|
android:theme="@style/Theme.Foodify"
|
||||||
|
android:usesCleartextTraffic="true"
|
||||||
tools:replace="android:theme"
|
tools:replace="android:theme"
|
||||||
tools:targetApi="31">
|
tools:targetApi="31">
|
||||||
|
<activity
|
||||||
|
android:name=".Activity.FavoriteFoodActivity"
|
||||||
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".Activity.ShopDetailActivity"
|
android:name=".Activity.ShopDetailActivity"
|
||||||
android:exported="false"
|
android:exported="false" />
|
||||||
/>
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".Activity.OrderDetailActivity"
|
android:name=".Activity.OrderDetailActivity"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
@@ -50,8 +52,7 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".Activity.FoodDetailActivity"
|
android:name=".Activity.FoodDetailActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:noHistory="true"
|
android:noHistory="true" />
|
||||||
/>
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".Activity.ResetPasswordActivity"
|
android:name=".Activity.ResetPasswordActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import static com.capstone.foodify.Common.TOKEN;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.capstone.foodify.Model.Food;
|
import com.capstone.foodify.Model.Food;
|
||||||
|
import com.capstone.foodify.Model.Response.Foods;
|
||||||
|
import com.capstone.foodify.Model.User;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
@@ -22,6 +24,7 @@ import retrofit2.http.DELETE;
|
|||||||
import retrofit2.http.GET;
|
import retrofit2.http.GET;
|
||||||
import retrofit2.http.POST;
|
import retrofit2.http.POST;
|
||||||
import retrofit2.http.Path;
|
import retrofit2.http.Path;
|
||||||
|
import retrofit2.http.Query;
|
||||||
|
|
||||||
public interface FoodApiToken {
|
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").create();
|
||||||
@@ -42,12 +45,16 @@ public interface FoodApiToken {
|
|||||||
.build()
|
.build()
|
||||||
.create(FoodApiToken.class);
|
.create(FoodApiToken.class);
|
||||||
|
|
||||||
@GET("wishlist")
|
|
||||||
Call<List<Food>> getListFavoriteFood();
|
|
||||||
|
|
||||||
@POST("users/{userId}/loves/{productId}")
|
@POST("users/{userId}/loves/{productId}")
|
||||||
Call<Food> addFoodToFavorite(@Path("userId") String userId, @Path("productId") String productId);
|
Call<Food> addFoodToFavorite(@Path("userId") int userId, @Path("productId") int productId);
|
||||||
|
|
||||||
@DELETE("wishlist/{id}")
|
@DELETE("users/{userId}/loves/{productId}")
|
||||||
Call<Food> removeFoodFromFavorite(@Path("id") int id);
|
Call<Food> removeFoodFromFavorite(@Path("userId") int userId, @Path("productId") int productId);
|
||||||
|
|
||||||
|
@GET("users/email/{userEmail}")
|
||||||
|
Call<User> getUserFromEmail(@Path("userEmail") String userEmail);
|
||||||
|
|
||||||
|
@GET("users/{userId}/loves")
|
||||||
|
Call<Foods> getListFavoriteFood(@Path("userId") int userId, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir);
|
||||||
}
|
}
|
||||||
|
|||||||
+37
-23
@@ -1,59 +1,73 @@
|
|||||||
package com.capstone.foodify.Fragment;
|
package com.capstone.foodify.Activity;
|
||||||
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.core.widget.NestedScrollView;
|
import androidx.core.widget.NestedScrollView;
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import android.view.LayoutInflater;
|
import android.content.Intent;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
|
import com.capstone.foodify.Adapter.FoodFavoriteAdapter;
|
||||||
|
import com.capstone.foodify.Adapter.RecyclerViewItemTouchHelperFavoriteFood;
|
||||||
|
import com.capstone.foodify.Common;
|
||||||
import com.capstone.foodify.ItemTouchHelperListener;
|
import com.capstone.foodify.ItemTouchHelperListener;
|
||||||
import com.capstone.foodify.Model.Food;
|
import com.capstone.foodify.Model.Food;
|
||||||
import com.capstone.foodify.Adapter.FoodFavoriteAdapter;
|
|
||||||
import com.capstone.foodify.R;
|
import com.capstone.foodify.R;
|
||||||
import com.capstone.foodify.Adapter.RecyclerViewItemTouchHelperFavoriteFood;
|
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class FavoriteFragment extends Fragment implements ItemTouchHelperListener {
|
public class FavoriteFoodActivity extends AppCompatActivity implements ItemTouchHelperListener {
|
||||||
|
|
||||||
private RecyclerView recyclerView_favorite_food;
|
private RecyclerView recyclerView_favorite_food;
|
||||||
private FoodFavoriteAdapter adapter;
|
private FoodFavoriteAdapter adapter;
|
||||||
private final List<Food> listFavoriteFood = new ArrayList<>();
|
private final List<Food> listFavoriteFood = new ArrayList<>();
|
||||||
|
private ImageView back_image;
|
||||||
private NestedScrollView listFavoriteFoodView;
|
private NestedScrollView listFavoriteFoodView;
|
||||||
@Override
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
||||||
Bundle savedInstanceState) {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
View rootView = inflater.inflate(R.layout.fragment_favourite, container, false);
|
|
||||||
|
|
||||||
recyclerView_favorite_food = rootView.findViewById(R.id.recycler_view_favorite_food);
|
@Override
|
||||||
listFavoriteFoodView = rootView.findViewById(R.id.list_favorite_food_view);
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_favorite_food);
|
||||||
|
|
||||||
|
//Init component
|
||||||
|
back_image = findViewById(R.id.back_image);
|
||||||
|
|
||||||
|
//Set event for back image
|
||||||
|
back_image.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
onBackPressed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//If user not sign in yet, app will move to sign in screen
|
||||||
|
if(Common.CURRENT_USER == null)
|
||||||
|
startActivity(new Intent(FavoriteFoodActivity.this, SignInActivity.class));
|
||||||
|
|
||||||
|
recyclerView_favorite_food = findViewById(R.id.recycler_view_favorite_food);
|
||||||
|
listFavoriteFoodView = findViewById(R.id.list_favorite_food_view);
|
||||||
|
|
||||||
//Get list favorite food
|
//Get list favorite food
|
||||||
getListFavoriteFood();
|
getListFavoriteFood();
|
||||||
|
|
||||||
//Set layout recyclerview
|
//Set layout recyclerview
|
||||||
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
|
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
|
||||||
recyclerView_favorite_food.setLayoutManager(linearLayoutManager);
|
recyclerView_favorite_food.setLayoutManager(linearLayoutManager);
|
||||||
adapter = new FoodFavoriteAdapter();
|
adapter = new FoodFavoriteAdapter();
|
||||||
|
|
||||||
RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL);
|
RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
|
||||||
recyclerView_favorite_food.addItemDecoration(itemDecoration);
|
recyclerView_favorite_food.addItemDecoration(itemDecoration);
|
||||||
|
|
||||||
ItemTouchHelper.SimpleCallback simpleCallback = new RecyclerViewItemTouchHelperFavoriteFood(0, ItemTouchHelper.LEFT, this);
|
ItemTouchHelper.SimpleCallback simpleCallback = new RecyclerViewItemTouchHelperFavoriteFood(0, ItemTouchHelper.LEFT, this);
|
||||||
new ItemTouchHelper(simpleCallback).attachToRecyclerView(recyclerView_favorite_food);
|
new ItemTouchHelper(simpleCallback).attachToRecyclerView(recyclerView_favorite_food);
|
||||||
return rootView;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getListFavoriteFood() {
|
private void getListFavoriteFood() {
|
||||||
@@ -97,14 +111,14 @@ public class FavoriteFragment extends Fragment implements ItemTouchHelperListene
|
|||||||
int indexDelete = viewHolder.getAdapterPosition();
|
int indexDelete = viewHolder.getAdapterPosition();
|
||||||
|
|
||||||
//Remove Item
|
//Remove Item
|
||||||
adapter.removeItem(indexDelete, getContext());
|
adapter.removeItem(indexDelete, this);
|
||||||
|
|
||||||
//Show notification food has been delete
|
//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() {
|
snackbar.setAction("Undo", new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
adapter.undoItem(foodDelete, indexDelete, getContext());
|
adapter.undoItem(foodDelete, indexDelete, FavoriteFoodActivity.this);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
snackbar.setActionTextColor(Color.YELLOW);
|
snackbar.setActionTextColor(Color.YELLOW);
|
||||||
@@ -22,6 +22,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.capstone.foodify.API.FoodApi;
|
import com.capstone.foodify.API.FoodApi;
|
||||||
|
import com.capstone.foodify.API.FoodApiToken;
|
||||||
import com.capstone.foodify.Common;
|
import com.capstone.foodify.Common;
|
||||||
import com.capstone.foodify.Model.Basket;
|
import com.capstone.foodify.Model.Basket;
|
||||||
import com.capstone.foodify.Model.Food;
|
import com.capstone.foodify.Model.Food;
|
||||||
@@ -50,7 +51,7 @@ public class FoodDetailActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private HorizontalQuantitizer horizontalQuantitizer;
|
private HorizontalQuantitizer horizontalQuantitizer;
|
||||||
private ImageSlider imageSlider;
|
private ImageSlider imageSlider;
|
||||||
private ImageView back_image, favourite_icon;
|
private ImageView back_image, favorite_icon;
|
||||||
private String foodId = "";
|
private String foodId = "";
|
||||||
private Food food;
|
private Food food;
|
||||||
private TextView foodName_txt, shopName_txt, discount_txt, price_txt, total_txt, countRating_txt, description_content_txt;
|
private TextView foodName_txt, shopName_txt, discount_txt, price_txt, total_txt, countRating_txt, description_content_txt;
|
||||||
@@ -77,7 +78,7 @@ public class FoodDetailActivity extends AppCompatActivity {
|
|||||||
discount_txt = findViewById(R.id.discount);
|
discount_txt = findViewById(R.id.discount);
|
||||||
price_txt = findViewById(R.id.price);
|
price_txt = findViewById(R.id.price);
|
||||||
add_to_basket_button = findViewById(R.id.add_to_basket_button);
|
add_to_basket_button = findViewById(R.id.add_to_basket_button);
|
||||||
favourite_icon = findViewById(R.id.favorite_icon);
|
favorite_icon = findViewById(R.id.favorite_icon);
|
||||||
total_txt = findViewById(R.id.total_text_view);
|
total_txt = findViewById(R.id.total_text_view);
|
||||||
countRating_txt = findViewById(R.id.count_rating_text_view);
|
countRating_txt = findViewById(R.id.count_rating_text_view);
|
||||||
description_content_txt = findViewById(R.id.content_description_text_view);
|
description_content_txt = findViewById(R.id.content_description_text_view);
|
||||||
@@ -147,42 +148,7 @@ public class FoodDetailActivity extends AppCompatActivity {
|
|||||||
add_to_basket_button.setOnClickListener(new View.OnClickListener() {
|
add_to_basket_button.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
if(horizontalQuantitizer.getValue() > 0){
|
addFoodToBasket();
|
||||||
Basket foodInBasket = Common.getFoodExistInBasket(food.getId());
|
|
||||||
if(foodInBasket == null){
|
|
||||||
//If item is not exist in basket
|
|
||||||
|
|
||||||
//Check food image is null or not
|
|
||||||
String imageTemp = null;
|
|
||||||
if(food.getImages().size() > 0)
|
|
||||||
imageTemp = food.getImages().get(0).getImageUrl();
|
|
||||||
|
|
||||||
Common.LIST_BASKET_FOOD.add(new Basket(food.getId(), imageTemp, food.getName(), food.getCost(), food.getShop().getName(),
|
|
||||||
String.valueOf(horizontalQuantitizer.getValue()), food.getDiscountPercent()));
|
|
||||||
} else {
|
|
||||||
//If item is exist in basket
|
|
||||||
|
|
||||||
for(int i = 0; i < Common.LIST_BASKET_FOOD.size(); i++){
|
|
||||||
String foodId = Common.LIST_BASKET_FOOD.get(i).getId();
|
|
||||||
//Find foodId exist
|
|
||||||
if(foodId.equals(food.getId())){
|
|
||||||
//Get quantity food from basket
|
|
||||||
String quantity = Common.LIST_BASKET_FOOD.get(i).getQuantity();
|
|
||||||
|
|
||||||
//Change quantity food from basket
|
|
||||||
int quantityInt = Integer.parseInt(quantity) + horizontalQuantitizer.getValue();
|
|
||||||
Common.LIST_BASKET_FOOD.get(i).setQuantity(String.valueOf(quantityInt));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Toast.makeText(FoodDetailActivity.this, "Đã thêm " + food.getName() + " vào giỏ hàng!", Toast.LENGTH_SHORT).show();
|
|
||||||
startActivity(new Intent(FoodDetailActivity.this, MainActivity.class));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
Toast.makeText(FoodDetailActivity.this, "Bạn chưa chọn số lượng đồ ăn cần đặt!", Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -193,6 +159,83 @@ public class FoodDetailActivity extends AppCompatActivity {
|
|||||||
startActivity(new Intent(FoodDetailActivity.this, ShopDetailActivity.class));
|
startActivity(new Intent(FoodDetailActivity.this, ShopDetailActivity.class));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Add food to favorite when user on click
|
||||||
|
favorite_icon.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
addFoodToFavorite();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addFoodToFavorite() {
|
||||||
|
FoodApiToken.apiService.addFoodToFavorite(Common.CURRENT_USER.getId(), Integer.parseInt(foodId)).enqueue(new Callback<Food>() {
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<Food> call, Throwable t) {
|
||||||
|
Toast.makeText(FoodDetailActivity.this, "Oops! Đã có lỗi, vui lòng thử lại sau!", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeFavoriteFood(){
|
||||||
|
FoodApiToken.apiService.removeFoodFromFavorite(Common.CURRENT_USER.getId(), Integer.parseInt(foodId)).enqueue(new Callback<Food>() {
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<Food> call, Throwable t) {
|
||||||
|
Toast.makeText(FoodDetailActivity.this, "Oops! Đã có lỗi, vui lòng thử lại sau!", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addFoodToBasket(){
|
||||||
|
if(horizontalQuantitizer.getValue() > 0){
|
||||||
|
Basket foodInBasket = Common.getFoodExistInBasket(food.getId());
|
||||||
|
if(foodInBasket == null){
|
||||||
|
//If item is not exist in basket
|
||||||
|
|
||||||
|
//Check food image is null or not
|
||||||
|
String imageTemp = null;
|
||||||
|
if(food.getImages().size() > 0)
|
||||||
|
imageTemp = food.getImages().get(0).getImageUrl();
|
||||||
|
|
||||||
|
Common.LIST_BASKET_FOOD.add(new Basket(food.getId(), imageTemp, food.getName(), food.getCost(), food.getShop().getName(),
|
||||||
|
String.valueOf(horizontalQuantitizer.getValue()), food.getDiscountPercent()));
|
||||||
|
} else {
|
||||||
|
//If item is exist in basket
|
||||||
|
|
||||||
|
for(int i = 0; i < Common.LIST_BASKET_FOOD.size(); i++){
|
||||||
|
String foodId = Common.LIST_BASKET_FOOD.get(i).getId();
|
||||||
|
//Find foodId exist
|
||||||
|
if(foodId.equals(food.getId())){
|
||||||
|
//Get quantity food from basket
|
||||||
|
String quantity = Common.LIST_BASKET_FOOD.get(i).getQuantity();
|
||||||
|
|
||||||
|
//Change quantity food from basket
|
||||||
|
int quantityInt = Integer.parseInt(quantity) + horizontalQuantitizer.getValue();
|
||||||
|
Common.LIST_BASKET_FOOD.get(i).setQuantity(String.valueOf(quantityInt));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Toast.makeText(FoodDetailActivity.this, "Đã thêm " + food.getName() + " vào giỏ hàng!", Toast.LENGTH_SHORT).show();
|
||||||
|
startActivity(new Intent(FoodDetailActivity.this, MainActivity.class));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Toast.makeText(FoodDetailActivity.this, "Bạn chưa chọn số lượng đồ ăn cần đặt!", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Review> getListReview() {
|
private List<Review> getListReview() {
|
||||||
|
|||||||
@@ -13,7 +13,9 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
import androidx.viewpager2.widget.ViewPager2;
|
||||||
|
|
||||||
|
import com.capstone.foodify.API.FoodApiToken;
|
||||||
import com.capstone.foodify.Common;
|
import com.capstone.foodify.Common;
|
||||||
|
import com.capstone.foodify.Model.User;
|
||||||
import com.capstone.foodify.R;
|
import com.capstone.foodify.R;
|
||||||
import com.capstone.foodify.ViewPagerAdapter;
|
import com.capstone.foodify.ViewPagerAdapter;
|
||||||
import com.google.android.gms.tasks.OnCompleteListener;
|
import com.google.android.gms.tasks.OnCompleteListener;
|
||||||
@@ -25,6 +27,9 @@ import com.google.firebase.auth.FirebaseUser;
|
|||||||
import com.google.firebase.auth.GetTokenResult;
|
import com.google.firebase.auth.GetTokenResult;
|
||||||
|
|
||||||
import io.paperdb.Paper;
|
import io.paperdb.Paper;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@@ -49,14 +54,29 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
public void onComplete(@NonNull Task<GetTokenResult> task) {
|
public void onComplete(@NonNull Task<GetTokenResult> task) {
|
||||||
if(task.isSuccessful()){
|
if(task.isSuccessful()){
|
||||||
Common.TOKEN = task.getResult().getToken();
|
Common.TOKEN = task.getResult().getToken();
|
||||||
|
|
||||||
|
//Get user from database
|
||||||
|
FoodApiToken.apiService.getUserFromEmail(user.getEmail()).enqueue(new Callback<User>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<User> call, Response<User> response) {
|
||||||
|
User userData = response.body();
|
||||||
|
if(userData != null){
|
||||||
|
Common.CURRENT_USER = userData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<User> call, Throwable t) {
|
||||||
|
System.out.println("ERROR: " + t);
|
||||||
|
Common.showErrorServerNotification(MainActivity.this);
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(MainActivity.this, "Error when taking token!", Toast.LENGTH_SHORT).show();
|
Toast.makeText(MainActivity.this, "Error when taking token!", Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -100,16 +120,9 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
case R.id.activity_basket:
|
case R.id.activity_basket:
|
||||||
viewPager2.setCurrentItem(2);
|
viewPager2.setCurrentItem(2);
|
||||||
break;
|
break;
|
||||||
case R.id.activity_favorite:
|
|
||||||
if(Common.TOKEN != null){
|
|
||||||
viewPager2.setCurrentItem(3);
|
|
||||||
} else {
|
|
||||||
startActivity(new Intent(MainActivity.this, SignInActivity.class));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case R.id.activity_profile:
|
case R.id.activity_profile:
|
||||||
if(Common.TOKEN != null){
|
if(Common.CURRENT_USER != null){
|
||||||
viewPager2.setCurrentItem(4);
|
viewPager2.setCurrentItem(3);
|
||||||
} else {
|
} else {
|
||||||
startActivity(new Intent(MainActivity.this, SignInActivity.class));
|
startActivity(new Intent(MainActivity.this, SignInActivity.class));
|
||||||
}
|
}
|
||||||
@@ -133,9 +146,6 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
bottomNavigationView.getMenu().findItem(R.id.activity_basket).setChecked(true);
|
bottomNavigationView.getMenu().findItem(R.id.activity_basket).setChecked(true);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
bottomNavigationView.getMenu().findItem(R.id.activity_favorite).setChecked(true);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
bottomNavigationView.getMenu().findItem(R.id.activity_profile).setChecked(true);
|
bottomNavigationView.getMenu().findItem(R.id.activity_profile).setChecked(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -143,4 +153,5 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ public class SignInActivity extends AppCompatActivity {
|
|||||||
//Init Paper
|
//Init Paper
|
||||||
Paper.init(this);
|
Paper.init(this);
|
||||||
|
|
||||||
if(Common.TOKEN != null)
|
if(Common.CURRENT_USER != null)
|
||||||
startActivity(new Intent(this, MainActivity.class));
|
startActivity(new Intent(this, MainActivity.class));
|
||||||
|
|
||||||
// Initialize Firebase Auth
|
// Initialize Firebase Auth
|
||||||
|
|||||||
@@ -81,17 +81,17 @@ public class FoodFavoriteAdapter extends RecyclerView.Adapter<FoodFavoriteAdapt
|
|||||||
listFavoriteFood.remove(index);
|
listFavoriteFood.remove(index);
|
||||||
notifyItemRemoved(index);
|
notifyItemRemoved(index);
|
||||||
|
|
||||||
FoodApiToken.apiService.removeFoodFromFavorite(index).enqueue(new Callback<Food>() {
|
// FoodApiToken.apiService.removeFoodFromFavorite(index).enqueue(new Callback<Food>() {
|
||||||
@Override
|
// @Override
|
||||||
public void onResponse(Call<Food> call, Response<Food> response) {
|
// public void onResponse(Call<Food> call, Response<Food> response) {
|
||||||
Toast.makeText(context, "Remove successful!", Toast.LENGTH_SHORT).show();
|
// Toast.makeText(context, "Remove successful!", Toast.LENGTH_SHORT).show();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public void onFailure(Call<Food> call, Throwable t) {
|
// public void onFailure(Call<Food> call, Throwable t) {
|
||||||
Toast.makeText(context, "Error: " + t, Toast.LENGTH_SHORT).show();
|
// Toast.makeText(context, "Error: " + t, Toast.LENGTH_SHORT).show();
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void undoItem(Food food, int index, Context context){
|
public void undoItem(Food food, int index, Context context){
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import androidx.annotation.IntRange;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.capstone.foodify.Model.Basket;
|
import com.capstone.foodify.Model.Basket;
|
||||||
|
import com.capstone.foodify.Model.Food;
|
||||||
|
import com.capstone.foodify.Model.User;
|
||||||
import com.saadahmedsoft.popupdialog.PopupDialog;
|
import com.saadahmedsoft.popupdialog.PopupDialog;
|
||||||
import com.saadahmedsoft.popupdialog.Styles;
|
import com.saadahmedsoft.popupdialog.Styles;
|
||||||
import com.saadahmedsoft.popupdialog.listener.OnDialogButtonClickListener;
|
import com.saadahmedsoft.popupdialog.listener.OnDialogButtonClickListener;
|
||||||
@@ -33,8 +35,9 @@ public class Common {
|
|||||||
public static final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(?=.*[@#$%^&+=!_])(?=\\S+$).{4,}$";
|
public static final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(?=.*[@#$%^&+=!_])(?=\\S+$).{4,}$";
|
||||||
public static final String PHONE_PATTERN = "^0[98753]{1}\\d{8}$";
|
public static final String PHONE_PATTERN = "^0[98753]{1}\\d{8}$";
|
||||||
public static List<Basket> LIST_BASKET_FOOD = new ArrayList<>();
|
public static List<Basket> LIST_BASKET_FOOD = new ArrayList<>();
|
||||||
|
public static List<Food> LIST_FAVORITE_FOOD = new ArrayList<>();
|
||||||
public static String TOKEN = null;
|
public static String TOKEN = null;
|
||||||
|
public static User CURRENT_USER = null;
|
||||||
|
|
||||||
public static String changeCurrencyUnit(float price){
|
public static String changeCurrencyUnit(float price){
|
||||||
Locale locale = new Locale("vi", "VN");
|
Locale locale = new Locale("vi", "VN");
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import androidx.fragment.app.Fragment;
|
|||||||
|
|
||||||
import com.capstone.foodify.Activity.AccountAndProfileActivity;
|
import com.capstone.foodify.Activity.AccountAndProfileActivity;
|
||||||
import com.capstone.foodify.Activity.AddressManagerActivity;
|
import com.capstone.foodify.Activity.AddressManagerActivity;
|
||||||
|
import com.capstone.foodify.Activity.FavoriteFoodActivity;
|
||||||
import com.capstone.foodify.Activity.MainActivity;
|
import com.capstone.foodify.Activity.MainActivity;
|
||||||
import com.capstone.foodify.Activity.OrderActivity;
|
import com.capstone.foodify.Activity.OrderActivity;
|
||||||
import com.capstone.foodify.Activity.SignInActivity;
|
import com.capstone.foodify.Activity.SignInActivity;
|
||||||
@@ -28,7 +29,7 @@ import com.saadahmedsoft.popupdialog.listener.OnDialogButtonClickListener;
|
|||||||
import io.paperdb.Paper;
|
import io.paperdb.Paper;
|
||||||
|
|
||||||
public class ProfileFragment extends Fragment {
|
public class ProfileFragment extends Fragment {
|
||||||
LinearLayout account_and_profile, manage_address, order_history, log_out;
|
LinearLayout account_and_profile, manage_address, favorite_food, order_history, log_out;
|
||||||
PopupDialog popupDialog;
|
PopupDialog popupDialog;
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
@@ -37,6 +38,7 @@ public class ProfileFragment extends Fragment {
|
|||||||
View rootView = inflater.inflate(R.layout.fragment_profile, container, false);
|
View rootView = inflater.inflate(R.layout.fragment_profile, container, false);
|
||||||
account_and_profile = rootView.findViewById(R.id.account_and_profile);
|
account_and_profile = rootView.findViewById(R.id.account_and_profile);
|
||||||
manage_address = rootView.findViewById(R.id.manage_address);
|
manage_address = rootView.findViewById(R.id.manage_address);
|
||||||
|
favorite_food = rootView.findViewById(R.id.favorite_food);
|
||||||
order_history = rootView.findViewById(R.id.order_history);
|
order_history = rootView.findViewById(R.id.order_history);
|
||||||
log_out = rootView.findViewById(R.id.log_out);
|
log_out = rootView.findViewById(R.id.log_out);
|
||||||
|
|
||||||
@@ -56,6 +58,13 @@ public class ProfileFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
favorite_food.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startActivity(new Intent(getActivity(), FavoriteFoodActivity.class));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
order_history.setOnClickListener(new View.OnClickListener() {
|
order_history.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ package com.capstone.foodify.Model;
|
|||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class User implements Serializable {
|
public class User implements Serializable {
|
||||||
|
private int id;
|
||||||
@SerializedName("addressDto")
|
@SerializedName("addressDto")
|
||||||
private Address address;
|
private Address address;
|
||||||
private String dateOfBirth;
|
private String dateOfBirth;
|
||||||
@@ -15,10 +17,19 @@ public class User implements Serializable {
|
|||||||
private boolean isLocked;
|
private boolean isLocked;
|
||||||
private String phoneNumber;
|
private String phoneNumber;
|
||||||
private String roleName;
|
private String roleName;
|
||||||
|
private List<Address> addresses;
|
||||||
|
|
||||||
public User() {
|
public User() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
public Address getAddress() {
|
public Address getAddress() {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
@@ -98,4 +109,12 @@ public class User implements Serializable {
|
|||||||
public void setRoleName(String roleName) {
|
public void setRoleName(String roleName) {
|
||||||
this.roleName = roleName;
|
this.roleName = roleName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Address> getAddresses() {
|
||||||
|
return addresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddresses(List<Address> addresses) {
|
||||||
|
this.addresses = addresses;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import androidx.fragment.app.FragmentActivity;
|
|||||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||||
|
|
||||||
import com.capstone.foodify.Fragment.BasketFragment;
|
import com.capstone.foodify.Fragment.BasketFragment;
|
||||||
import com.capstone.foodify.Fragment.FavoriteFragment;
|
|
||||||
import com.capstone.foodify.Fragment.HomeFragment;
|
import com.capstone.foodify.Fragment.HomeFragment;
|
||||||
import com.capstone.foodify.Fragment.ProfileFragment;
|
import com.capstone.foodify.Fragment.ProfileFragment;
|
||||||
import com.capstone.foodify.Fragment.SearchFragment;
|
import com.capstone.foodify.Fragment.SearchFragment;
|
||||||
@@ -23,14 +22,13 @@ public class ViewPagerAdapter extends FragmentStateAdapter {
|
|||||||
switch(position) {
|
switch(position) {
|
||||||
case 1: return new SearchFragment();
|
case 1: return new SearchFragment();
|
||||||
case 2: return new BasketFragment();
|
case 2: return new BasketFragment();
|
||||||
case 3: return new FavoriteFragment();
|
case 3: return new ProfileFragment();
|
||||||
case 4: return new ProfileFragment();
|
|
||||||
default: return new HomeFragment();
|
default: return new HomeFragment();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return 5;
|
return 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<vector android:height="24dp" android:tint="#F62D4C"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z"/>
|
||||||
|
</vector>
|
||||||
+15
-3
@@ -4,14 +4,26 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
tools:context=".Fragment.FavoriteFragment"
|
tools:context=".Activity.FavoriteFoodActivity"
|
||||||
android:id="@+id/list_favorite_food_view"
|
android:id="@+id/list_favorite_food_view"
|
||||||
>
|
>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/back_image"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:src="@drawable/back_button"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginTop="25dp"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/text_view_1"
|
android:id="@+id/text_view_1"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@@ -20,9 +32,9 @@
|
|||||||
android:fontFamily="@font/bebas"
|
android:fontFamily="@font/bebas"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="40sp"
|
android:textSize="40sp"
|
||||||
android:layout_marginTop="40dp"
|
android:layout_marginTop="20dp"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toBottomOf="@id/back_image"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/order_history"
|
android:id="@+id/favorite_food"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="40dp"
|
android:layout_marginTop="40dp"
|
||||||
@@ -144,6 +144,51 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
>
|
>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/ic_favorite"
|
||||||
|
android:src="@drawable/baseline_favorite_border_24"
|
||||||
|
android:layout_width="32dp"
|
||||||
|
android:layout_height="32dp"
|
||||||
|
tools:ignore="ContentDescription"
|
||||||
|
app:tint="@color/primaryColor"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:text="Favorite Food"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:fontFamily="@font/opensans"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
tools:ignore="HardcodedText"
|
||||||
|
android:layout_weight="1"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:rotation="180"
|
||||||
|
android:src="@drawable/back_button"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/order_history"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="40dp"
|
||||||
|
android:layout_marginStart="20dp"
|
||||||
|
android:layout_marginEnd="20dp"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/favorite_food"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/ic_order_history"
|
android:id="@+id/ic_order_history"
|
||||||
android:src="@drawable/ic_basket"
|
android:src="@drawable/ic_basket"
|
||||||
|
|||||||
@@ -19,12 +19,6 @@
|
|||||||
android:title="@string/activity_basket"
|
android:title="@string/activity_basket"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/activity_favorite"
|
|
||||||
android:icon="@drawable/ic_favourite"
|
|
||||||
android:title="@string/activity_favorite"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/activity_profile"
|
android:id="@+id/activity_profile"
|
||||||
android:icon="@drawable/ic_profile"
|
android:icon="@drawable/ic_profile"
|
||||||
|
|||||||
Reference in New Issue
Block a user