From 971403a04d1a14f8f4f3a24b4dc332ea2d123044 Mon Sep 17 00:00:00 2001 From: phanhuuloi27 <73208452+Nezumi2711@users.noreply.github.com> Date: Sun, 12 Jun 2022 21:27:49 +0700 Subject: [PATCH] Add favorite Food --- .../app/src/main/assets/databases/EatItDB.db | Bin 16384 -> 24576 bytes .../waterbase/foodify/Database/Database.java | 25 ++++++ .../java/com/waterbase/foodify/FoodList.java | 80 ++++++++++++------ .../foodify/ViewHolder/FoodViewHolder.java | 3 +- .../res/drawable/ic_baseline_favorite_24.xml | 5 ++ .../ic_baseline_favorite_border_24.xml | 5 ++ Foodify/app/src/main/res/layout/food_item.xml | 32 +++++-- 7 files changed, 116 insertions(+), 34 deletions(-) create mode 100644 Foodify/app/src/main/res/drawable/ic_baseline_favorite_24.xml create mode 100644 Foodify/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml diff --git a/Foodify/app/src/main/assets/databases/EatItDB.db b/Foodify/app/src/main/assets/databases/EatItDB.db index d211e2cfe378dd98d1906754ef47234efdd9ed9c..69bb69d505e516698dec746ed52d28b2f2fab899 100644 GIT binary patch delta 228 zcmZo@U~D+RI6+#Fg@J*A4TxcYWulI;I17WGe=RTn4+d7=PYisI_z&_;;QhoGyRor` zw?31FU0hzCu~D%kF)1h2EwL=WD6=HB7|vjI4svx2aa9O$bnTq!e1bO;821P1(yGCljlxT8k8nUv9yUH^%Wag!$RumWJ i0PTsFPb@9T2Mff*jgB{jGubvz;43g(WFW9eK>z^R=s}VI delta 59 zcmZoTz}V2hI6+#FnSp_U1&CpQd7_T7Ff)Ume=RTn4+dtw2@HIX_z&_;*eoa@$G3R` HUx6V2HnR*4 diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Database/Database.java b/Foodify/app/src/main/java/com/waterbase/foodify/Database/Database.java index 577f3f1..2a2e603 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Database/Database.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Database/Database.java @@ -59,4 +59,29 @@ public class Database extends SQLiteAssetHelper { String query = String.format("DELETE FROM OrderDetail"); db.execSQL(query); } + + //Favorites + public void addToFavorites(String foodId){ + SQLiteDatabase db = getReadableDatabase(); + String query = String.format("INSERT INTO Favorites(FoodId) VALUES('%s');", foodId); + db.execSQL(query); + } + + public void removeFromFavorites(String foodId){ + SQLiteDatabase db = getReadableDatabase(); + String query = String.format("DELETE FROM Favorites WHERE FoodId='%s';", foodId); + db.execSQL(query); + } + + public boolean isFavorite(String foodId){ + SQLiteDatabase db = getReadableDatabase(); + String query = String.format("SELECT * FROM Favorites WHERE FoodId='%s'", foodId); + Cursor cursor = db.rawQuery(query, null); + if(cursor.getCount() <= 0){ + cursor.close(); + return false; + } + cursor.close(); + return true; + } } 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 5bd6efe..132a476 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java @@ -23,6 +23,7 @@ import com.google.firebase.database.ValueEventListener; import com.mancj.materialsearchbar.MaterialSearchBar; 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.Food; import com.waterbase.foodify.ViewHolder.FoodViewHolder; @@ -47,21 +48,21 @@ public class FoodList extends AppCompatActivity { List suggestList = new ArrayList<>(); MaterialSearchBar materialSearchBar; + //Favorites + Database localDB; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_food_list); - // calling the action bar - ActionBar actionBar = getSupportActionBar(); - - // showing the back button in action bar - actionBar.setDisplayHomeAsUpEnabled(true); - //Firebase database = FirebaseDatabase.getInstance(); foodList = database.getReference("Foods"); + //Local DB + localDB = new Database(this); + recyclerView = (RecyclerView) findViewById(R.id.recyler_food); recyclerView.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); @@ -70,7 +71,7 @@ public class FoodList extends AppCompatActivity { //Get Intent here if(getIntent() != null) categoryId = getIntent().getStringExtra("CategoryId"); - categoryName = getIntent().getStringExtra("CategoryName"); + categoryName = getIntent().getStringExtra("CategoryName"); if(!categoryId.isEmpty() && categoryId != null) { if(Common.isConnectedToInternet(getBaseContext())) loadListFood(categoryId); @@ -132,6 +133,12 @@ public class FoodList extends AppCompatActivity { }); setTitle(categoryName); + + // calling the action bar + ActionBar actionBar = getSupportActionBar(); + + // showing the back button in action bar + actionBar.setDisplayHomeAsUpEnabled(true); } private void startSearch(CharSequence text) { @@ -179,28 +186,47 @@ public class FoodList extends AppCompatActivity { } private void loadListFood(String categoryId){ - adapter = new FirebaseRecyclerAdapter(Food.class, R.layout.food_item, - FoodViewHolder.class, foodList.orderByChild("menuId").equalTo(categoryId) // like: Select * from Foods where MenuId = 'categoryId' - ) { - @Override - protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) { - viewHolder.food_name.setText(model.getName()); - Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image); + adapter = new FirebaseRecyclerAdapter(Food.class, R.layout.food_item, + FoodViewHolder.class, foodList.orderByChild("menuId").equalTo(categoryId) // like: Select * from Foods where MenuId = 'categoryId' + ) { + @Override + protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) { + viewHolder.food_name.setText(model.getName()); + Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image); - final Food local = model; - viewHolder.setItemClickListener(new ItemClickListener() { - @Override - public void onClick(View view, int position, boolean isLongClick) { - //Start Activity - Intent foodDetail = new Intent(FoodList.this, FoodDetail.class); - foodDetail.putExtra("FoodId", adapter.getRef(position).getKey()); // Send Food Id to new activity - startActivity(foodDetail); - } - }); - } - }; + //Add Favorites + if(localDB.isFavorite(adapter.getRef(position).getKey())) + viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_24); - //Set Adapter + //Click to change state of Favorites + viewHolder.fav_image.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!localDB.isFavorite(adapter.getRef(position).getKey())){ + localDB.addToFavorites(adapter.getRef(position).getKey()); + 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 { + localDB.removeFromFavorites(adapter.getRef(position).getKey()); + viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_border_24); + Toast.makeText(FoodList.this, model.getName() + " đã xoá khỏi danh sách yêu thích", Toast.LENGTH_SHORT).show(); + } + } + }); + + viewHolder.setItemClickListener(new ItemClickListener() { + @Override + public void onClick(View view, int position, boolean isLongClick) { + //Start Activity + Intent foodDetail = new Intent(FoodList.this, FoodDetail.class); + foodDetail.putExtra("FoodId", adapter.getRef(position).getKey()); // Send Food Id to new activity + startActivity(foodDetail); + } + }); + } + }; + + //Set Adapter recyclerView.setAdapter(adapter); } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FoodViewHolder.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FoodViewHolder.java index 48f040d..f0e0551 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FoodViewHolder.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FoodViewHolder.java @@ -13,7 +13,7 @@ import com.waterbase.foodify.R; public class FoodViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public TextView food_name; - public ImageView food_image; + public ImageView food_image, fav_image; private ItemClickListener itemClickListener; @@ -26,6 +26,7 @@ public class FoodViewHolder extends RecyclerView.ViewHolder implements View.OnCl 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); itemView.setOnClickListener(this); } diff --git a/Foodify/app/src/main/res/drawable/ic_baseline_favorite_24.xml b/Foodify/app/src/main/res/drawable/ic_baseline_favorite_24.xml new file mode 100644 index 0000000..2d9d13c --- /dev/null +++ b/Foodify/app/src/main/res/drawable/ic_baseline_favorite_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Foodify/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml b/Foodify/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml new file mode 100644 index 0000000..996e16d --- /dev/null +++ b/Foodify/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Foodify/app/src/main/res/layout/food_item.xml b/Foodify/app/src/main/res/layout/food_item.xml index 6f5eec8..c803d4a 100644 --- a/Foodify/app/src/main/res/layout/food_item.xml +++ b/Foodify/app/src/main/res/layout/food_item.xml @@ -18,16 +18,36 @@ android:layout_height="match_parent" android:scaleType="centerCrop" /> - + > + + + + + + \ No newline at end of file