diff --git a/Foodify/app/src/main/assets/databases/EatItDB.db b/Foodify/app/src/main/assets/databases/EatItDB.db index d211e2c..69bb69d 100644 Binary files a/Foodify/app/src/main/assets/databases/EatItDB.db and b/Foodify/app/src/main/assets/databases/EatItDB.db differ 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