diff --git a/Foodify/app/src/main/AndroidManifest.xml b/Foodify/app/src/main/AndroidManifest.xml index e91c296..6d6a496 100644 --- a/Foodify/app/src/main/AndroidManifest.xml +++ b/Foodify/app/src/main/AndroidManifest.xml @@ -20,6 +20,9 @@ android:theme="@style/Theme.Foodify" tools:replace="android:theme" tools:targetApi="31"> + getAllFavorites(String userPhone) + { + SQLiteDatabase db = getReadableDatabase(); + SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); + + String[] sqlSelect = {"UserPhone", "FoodId", "FoodName", "FoodPrice", "FoodMenuId", "FoodImage", "FoodDiscount", "FoodDescription"}; + String sqlTable = "Favorites"; + + qb.setTables(sqlTable); + Cursor c = qb.query(db, sqlSelect, "UserPhone=?", new String[]{userPhone}, null, null, null); + + final List result = new ArrayList<>(); + if(c.moveToFirst()) + { + do{ + result.add(new Favorites( + c.getString(c.getColumnIndexOrThrow("FoodId")), + c.getString(c.getColumnIndexOrThrow("FoodName")), + c.getString(c.getColumnIndexOrThrow("FoodPrice")), + c.getString(c.getColumnIndexOrThrow("FoodMenuId")), + c.getString(c.getColumnIndexOrThrow("FoodImage")), + c.getString(c.getColumnIndexOrThrow("FoodDiscount")), + c.getString(c.getColumnIndexOrThrow("FoodDescription")), + c.getString(c.getColumnIndexOrThrow("UserPhone")) + )); + }while (c.moveToNext()); + } + + return result; + } + public void removeFromFavorites(String foodId, String userPhone) { SQLiteDatabase db = getReadableDatabase(); String query = String.format("DELETE FROM Favorites WHERE FoodId='%s' and UserPhone='%s';", foodId, userPhone); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/FavoritesActivity.java b/Foodify/app/src/main/java/com/waterbase/foodify/FavoritesActivity.java new file mode 100644 index 0000000..aa7b652 --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FavoritesActivity.java @@ -0,0 +1,83 @@ +package com.waterbase.foodify; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.animation.AnimationUtils; +import android.view.animation.LayoutAnimationController; +import android.widget.RelativeLayout; + +import com.google.android.material.snackbar.Snackbar; +import com.waterbase.foodify.Common.Common; +import com.waterbase.foodify.Database.Database; +import com.waterbase.foodify.Helper.RecyclerItemTouchHelper; +import com.waterbase.foodify.Interface.RecyclerItemTouchHelperListener; +import com.waterbase.foodify.Model.Favorites; +import com.waterbase.foodify.ViewHolder.FavoritesAdapter; +import com.waterbase.foodify.ViewHolder.FavoritesViewHolder; + +public class FavoritesActivity extends AppCompatActivity implements RecyclerItemTouchHelperListener { + + RecyclerView recyclerView; + RecyclerView.LayoutManager layoutManager; + + FavoritesAdapter adapter; + + RelativeLayout rootLayout; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_favorites); + + rootLayout = findViewById(R.id.rootLayout); + + recyclerView = findViewById(R.id.recycler_fav); + layoutManager = new LinearLayoutManager(this); + recyclerView.setLayoutManager(layoutManager); + + //Swipe to delete + ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this); + new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView); + + loadFavorites(); + } + + private void loadFavorites() { + adapter = new FavoritesAdapter(this, new Database(this).getAllFavorites(Common.currentUser.getPhone())); + recyclerView.setAdapter(adapter); + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position) { + if(viewHolder instanceof FavoritesViewHolder) + { + String name = ((FavoritesAdapter)recyclerView.getAdapter()).getItem(position).getFoodName(); + + Favorites deleteItem = ((FavoritesAdapter)recyclerView.getAdapter()).getItem(viewHolder.getAdapterPosition()); + int deleteIndex = viewHolder.getAdapterPosition(); + + adapter.removeItem(viewHolder.getAdapterPosition()); + new Database(getBaseContext()).removeFromFavorites(deleteItem.getFoodId(), Common.currentUser.getPhone()); + + //Make Snackbar + Snackbar snackbar = Snackbar.make(rootLayout, name + " đã xoá khỏi danh sách yêu thích của bạn!", Snackbar.LENGTH_LONG); + snackbar.setAction("Hoàn tác", new View.OnClickListener() { + @Override + public void onClick(View v) { + adapter.restoreItem(deleteItem, deleteIndex); + new Database(getBaseContext()).addToFavorites(deleteItem); +// updateTotalPrice(); + + } + }); + snackbar.setActionTextColor(Color.YELLOW); + snackbar.show(); + } + } +} \ No newline at end of file diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java b/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java index 51caefa..8b6953e 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java @@ -34,6 +34,7 @@ import com.squareup.picasso.Picasso; import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Database.Database; import com.waterbase.foodify.Interface.ItemClickListener; +import com.waterbase.foodify.Model.Favorites; import com.waterbase.foodify.Model.Food; import com.waterbase.foodify.Model.Order; import com.waterbase.foodify.ViewHolder.FoodViewHolder; @@ -189,7 +190,7 @@ public class FoodList extends AppCompatActivity { } }); - recyclerView = (RecyclerView) findViewById(R.id.recyler_food); + recyclerView = (RecyclerView) findViewById(R.id.recycler_food); recyclerView.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); @@ -342,8 +343,20 @@ public class FoodList extends AppCompatActivity { viewHolder.fav_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + + Favorites favorites = new Favorites(); + + favorites.setFoodId(adapter.getRef(viewHolder.getAdapterPosition()).getKey()); + favorites.setFoodName(model.getName()); + favorites.setFoodDescription(model.getDescription()); + favorites.setFoodDiscount(model.getDiscount()); + favorites.setFoodImage(model.getImage()); + favorites.setFoodMenuId(model.getMenuId()); + favorites.setUserPhone(Common.currentUser.getPhone()); + favorites.setFoodPrice(model.getPrice()); + if (!localDB.isFavorite(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone())) { - localDB.addToFavorites(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone()); + localDB.addToFavorites(favorites); viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_24); Toast.makeText(FoodList.this, model.getName() + " đã thêm vào danh sách yêu thích", Toast.LENGTH_SHORT).show(); } else { diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Helper/RecyclerItemTouchHelper.java b/Foodify/app/src/main/java/com/waterbase/foodify/Helper/RecyclerItemTouchHelper.java index 40b8042..5eff05c 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Helper/RecyclerItemTouchHelper.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Helper/RecyclerItemTouchHelper.java @@ -10,6 +10,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.waterbase.foodify.Interface.RecyclerItemTouchHelperListener; import com.waterbase.foodify.ViewHolder.CartViewHolder; +import com.waterbase.foodify.ViewHolder.FavoritesViewHolder; public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback { @@ -27,7 +28,7 @@ public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback { @Override public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { - if(listener != null) + if (listener != null) listener.onSwiped(viewHolder, direction, viewHolder.getAdapterPosition()); } @@ -38,28 +39,54 @@ public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback { @Override public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { - View foregroundView = ((CartViewHolder)viewHolder).view_foreground; - getDefaultUIUtil().clearView(foregroundView); + if (viewHolder instanceof CartViewHolder) { + View foregroundView = ((CartViewHolder) viewHolder).view_foreground; + getDefaultUIUtil().clearView(foregroundView); + } else if(viewHolder instanceof FavoritesViewHolder) + { + View foregroundView = ((FavoritesViewHolder) viewHolder).view_foreground; + getDefaultUIUtil().clearView(foregroundView); + } } @Override public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { - View foregroundView = ((CartViewHolder)viewHolder).view_foreground; - getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive); + if (viewHolder instanceof CartViewHolder) { + View foregroundView = ((CartViewHolder) viewHolder).view_foreground; + getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive); + } else if(viewHolder instanceof FavoritesViewHolder) + { + View foregroundView = ((FavoritesViewHolder) viewHolder).view_foreground; + getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive); + } + } @Override public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState) { - if(viewHolder != null) - { - View foregroundView = ((CartViewHolder)viewHolder).view_foreground; - getDefaultUIUtil().onSelected(foregroundView); + if (viewHolder != null) { + if (viewHolder instanceof CartViewHolder) { + View foregroundView = ((CartViewHolder) viewHolder).view_foreground; + getDefaultUIUtil().onSelected(foregroundView); + } else if(viewHolder instanceof FavoritesViewHolder) + { + View foregroundView = ((FavoritesViewHolder) viewHolder).view_foreground; + getDefaultUIUtil().onSelected(foregroundView); + } + } } @Override public void onChildDrawOver(@NonNull Canvas c, @NonNull RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { - View foregroundView = ((CartViewHolder)viewHolder).view_foreground; - getDefaultUIUtil().onDrawOver(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive); + if (viewHolder instanceof CartViewHolder) { + View foregroundView = ((CartViewHolder) viewHolder).view_foreground; + getDefaultUIUtil().onDrawOver(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive); + } else if(viewHolder instanceof FavoritesViewHolder) + { + View foregroundView = ((FavoritesViewHolder) viewHolder).view_foreground; + getDefaultUIUtil().onDrawOver(c, recyclerView, foregroundView, dX, dY, actionState, isCurrentlyActive); + } + } } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Home.java b/Foodify/app/src/main/java/com/waterbase/foodify/Home.java index d066586..5470c3c 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Home.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Home.java @@ -327,6 +327,8 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati showHomeAddressDialog(); } else if (id == R.id.nav_setting) { showSettingDialog(); + } else if (id == R.id.nav_favorites) { + startActivity(new Intent(Home.this, FavoritesActivity.class)); } else if (id == R.id.nav_log_out) { diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Model/Favorites.java b/Foodify/app/src/main/java/com/waterbase/foodify/Model/Favorites.java new file mode 100644 index 0000000..584a37d --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Model/Favorites.java @@ -0,0 +1,84 @@ +package com.waterbase.foodify.Model; + +public class Favorites { + + private String FoodId, FoodName, FoodPrice, FoodMenuId, FoodImage, FoodDiscount, FoodDescription, UserPhone; + + public Favorites() { + } + + public Favorites(String foodId, String foodName, String foodPrice, String foodMenuId, String foodImage, String foodDiscount, String foodDescription, String userPhone) { + FoodId = foodId; + FoodName = foodName; + FoodPrice = foodPrice; + FoodMenuId = foodMenuId; + FoodImage = foodImage; + FoodDiscount = foodDiscount; + FoodDescription = foodDescription; + UserPhone = userPhone; + } + + public String getFoodId() { + return FoodId; + } + + public void setFoodId(String foodId) { + FoodId = foodId; + } + + public String getFoodName() { + return FoodName; + } + + public void setFoodName(String foodName) { + FoodName = foodName; + } + + public String getFoodPrice() { + return FoodPrice; + } + + public void setFoodPrice(String foodPrice) { + FoodPrice = foodPrice; + } + + public String getFoodMenuId() { + return FoodMenuId; + } + + public void setFoodMenuId(String foodMenuId) { + FoodMenuId = foodMenuId; + } + + public String getFoodImage() { + return FoodImage; + } + + public void setFoodImage(String foodImage) { + FoodImage = foodImage; + } + + public String getFoodDiscount() { + return FoodDiscount; + } + + public void setFoodDiscount(String foodDiscount) { + FoodDiscount = foodDiscount; + } + + public String getFoodDescription() { + return FoodDescription; + } + + public void setFoodDescription(String foodDescription) { + FoodDescription = foodDescription; + } + + public String getUserPhone() { + return UserPhone; + } + + public void setUserPhone(String userPhone) { + UserPhone = userPhone; + } +} diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/SearchActivity.java b/Foodify/app/src/main/java/com/waterbase/foodify/SearchActivity.java index 1d8e52d..3934182 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/SearchActivity.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/SearchActivity.java @@ -32,6 +32,7 @@ import com.squareup.picasso.Picasso; import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Database.Database; import com.waterbase.foodify.Interface.ItemClickListener; +import com.waterbase.foodify.Model.Favorites; import com.waterbase.foodify.Model.Food; import com.waterbase.foodify.Model.Order; import com.waterbase.foodify.ViewHolder.FoodViewHolder; @@ -123,11 +124,11 @@ public class SearchActivity extends AppCompatActivity { } }); - //Load add foods - loadAddFood(); + //Load all foods + loadAllFood(); } - private void loadAddFood() { + private void loadAllFood() { //Create query by category Id Query searchByName = foodList; //Create Options with query @@ -191,8 +192,20 @@ public class SearchActivity extends AppCompatActivity { viewHolder.fav_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + + Favorites favorites = new Favorites(); + + favorites.setFoodId(adapter.getRef(position).getKey()); + favorites.setFoodName(model.getName()); + favorites.setFoodDescription(model.getDescription()); + favorites.setFoodDiscount(model.getDiscount()); + favorites.setFoodImage(model.getImage()); + favorites.setFoodMenuId(model.getMenuId()); + favorites.setUserPhone(Common.currentUser.getPhone()); + favorites.setFoodPrice(model.getPrice()); + if (!localDB.isFavorite(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone())) { - localDB.addToFavorites(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone()); + localDB.addToFavorites(favorites); viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_24); Toast.makeText(SearchActivity.this, model.getName() + " đã thêm vào danh sách yêu thích", Toast.LENGTH_SHORT).show(); } else { diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FavoritesAdapter.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FavoritesAdapter.java new file mode 100644 index 0000000..aa50b9a --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FavoritesAdapter.java @@ -0,0 +1,125 @@ +package com.waterbase.foodify.ViewHolder; + +import android.content.Context; +import android.content.Intent; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.style.StrikethroughSpan; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.squareup.picasso.Picasso; +import com.waterbase.foodify.Common.Common; +import com.waterbase.foodify.Database.Database; +import com.waterbase.foodify.FoodDetail; +import com.waterbase.foodify.FoodList; +import com.waterbase.foodify.Interface.ItemClickListener; +import com.waterbase.foodify.Model.Favorites; +import com.waterbase.foodify.Model.Order; +import com.waterbase.foodify.R; + +import java.util.List; + +public class FavoritesAdapter extends RecyclerView.Adapter { + + private Context context; + private List favoritesList; + + public FavoritesAdapter(Context context, List favoritesList) { + this.context = context; + this.favoritesList = favoritesList; + } + + @NonNull + @Override + public FavoritesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(context) + .inflate(R.layout.favorite_item, parent, false); + return new FavoritesViewHolder(itemView); + } + + @Override + public void onBindViewHolder(@NonNull FavoritesViewHolder viewHolder, int position) { + Favorites model = favoritesList.get(position); + + viewHolder.food_name.setText(model.getFoodName()); + + if (Integer.parseInt(model.getFoodDiscount()) > 0) { + String foodPrice = model.getFoodPrice() + "đ"; + long newFoodPrice = Long.parseLong(model.getFoodPrice()) - Long.parseLong(model.getFoodPrice()) * Long.parseLong(model.getFoodDiscount()) / 100; + SpannableStringBuilder spnBuilder = new SpannableStringBuilder(foodPrice); + StrikethroughSpan strikethroughSpan = new StrikethroughSpan(); + spnBuilder.setSpan(strikethroughSpan, 0, foodPrice.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + viewHolder.food_price.setText(spnBuilder); + viewHolder.newPrice.setText(newFoodPrice + "đ"); + viewHolder.discount.setText("- " + model.getFoodDiscount() + "%"); + } else { + viewHolder.food_price.setText(String.format("%s đ", model.getFoodPrice())); + viewHolder.discount.setVisibility(View.GONE); + viewHolder.newPrice.setVisibility(View.GONE); + } + + Picasso.with(context).load(model.getFoodImage()).into(viewHolder.food_image); + + //Quick Cart + + viewHolder.quick_cart.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean ifExists = new Database(context).checkFoodExists(model.getFoodId(), Common.currentUser.getPhone()); + if (!ifExists) { + new Database(context).addToCart(new Order( + Common.currentUser.getPhone(), + model.getFoodId(), + model.getFoodName(), + "1", + model.getFoodPrice(), + model.getFoodDiscount(), + model.getFoodImage() + )); + } else { + new Database(context).increaseCart(Common.currentUser.getPhone(), model.getFoodId()); + } + + Toast.makeText(context, "Đã thêm vào giỏ hàng!", Toast.LENGTH_SHORT).show(); + } + }); + + viewHolder.setItemClickListener(new ItemClickListener() { + @Override + public void onClick(View view, int position, boolean isLongClick) { + //Start Activity + Intent foodDetail = new Intent(context, FoodDetail.class); + foodDetail.putExtra("FoodId", model.getFoodId()); // Send Food Id to new activity + context.startActivity(foodDetail); + } + }); + } + + @Override + public int getItemCount() { + return favoritesList.size(); + } + + public void removeItem(int position) + { + favoritesList.remove(position); + notifyItemRemoved(position); + } + + public void restoreItem(Favorites item, int position) + { + favoritesList.add(position, item); + notifyItemInserted(position); + } + + public Favorites getItem(int position) + { + return favoritesList.get(position); + } +} diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FavoritesViewHolder.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FavoritesViewHolder.java new file mode 100644 index 0000000..d34290f --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FavoritesViewHolder.java @@ -0,0 +1,50 @@ +package com.waterbase.foodify.ViewHolder; + +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.waterbase.foodify.Interface.ItemClickListener; +import com.waterbase.foodify.R; + +public class FavoritesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + + public TextView food_name, food_price, discount, newPrice; + public ImageView food_image, fav_image, quick_cart; + + public RelativeLayout view_background; + public LinearLayout view_foreground; + + private ItemClickListener itemClickListener; + + public void setItemClickListener(ItemClickListener itemClickListener) { + this.itemClickListener = itemClickListener; + } + + public FavoritesViewHolder(@NonNull View itemView) { + super(itemView); + + food_name = (TextView) itemView.findViewById(R.id.food_name); + food_image = (ImageView) itemView.findViewById(R.id.food_image); + fav_image = (ImageView) itemView.findViewById(R.id.fav); + food_price = (TextView) itemView.findViewById(R.id.food_price); + discount = (TextView) itemView.findViewById(R.id.discount); + newPrice = (TextView) itemView.findViewById(R.id.new_Price); + quick_cart = (ImageView) itemView.findViewById(R.id.btn_quick_cart); + + view_background = (RelativeLayout) itemView.findViewById(R.id.view_background); + view_foreground = (LinearLayout) itemView.findViewById(R.id.view_foreground); + + itemView.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + itemClickListener.onClick(v, getAdapterPosition(), false); + } +} diff --git a/Foodify/app/src/main/res/layout/activity_favorites.xml b/Foodify/app/src/main/res/layout/activity_favorites.xml new file mode 100644 index 0000000..7fd874d --- /dev/null +++ b/Foodify/app/src/main/res/layout/activity_favorites.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/Foodify/app/src/main/res/layout/activity_food_list.xml b/Foodify/app/src/main/res/layout/activity_food_list.xml index a9bf13b..b945074 100644 --- a/Foodify/app/src/main/res/layout/activity_food_list.xml +++ b/Foodify/app/src/main/res/layout/activity_food_list.xml @@ -24,7 +24,7 @@ android:layout_below="@+id/searchBar" android:layout_width="match_parent" android:layout_height="match_parent" - android:id="@+id/recyler_food" + android:id="@+id/recycler_food" android:scrollbars="vertical" /> diff --git a/Foodify/app/src/main/res/layout/favorite_item.xml b/Foodify/app/src/main/res/layout/favorite_item.xml new file mode 100644 index 0000000..97935d2 --- /dev/null +++ b/Foodify/app/src/main/res/layout/favorite_item.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Foodify/app/src/main/res/menu/activity_main_drawer.xml b/Foodify/app/src/main/res/menu/activity_main_drawer.xml index 6dadcbd..f56cf3e 100644 --- a/Foodify/app/src/main/res/menu/activity_main_drawer.xml +++ b/Foodify/app/src/main/res/menu/activity_main_drawer.xml @@ -10,6 +10,12 @@ android:iconTint="@color/white" android:title="Địa chỉ mặc định" /> +