diff --git a/Foodify/app/build.gradle b/Foodify/app/build.gradle index 8b2ca18..e3e95e6 100644 --- a/Foodify/app/build.gradle +++ b/Foodify/app/build.gradle @@ -69,6 +69,9 @@ dependencies { implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:2.0.3' + + //CounterFAB + implementation 'com.github.andremion:counterfab:1.2.2' } apply plugin: 'com.google.gms.google-services' \ No newline at end of file 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 2a2e603..8fbf9b4 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 @@ -84,4 +84,18 @@ public class Database extends SQLiteAssetHelper { cursor.close(); return true; } + + public int getCountCart() { + int count = 0; + SQLiteDatabase db = getReadableDatabase(); + String query = String.format("SELECT COUNT(*) FROM OrderDetail"); + Cursor cursor = db.rawQuery(query, null); + if(cursor.moveToFirst()){ + do { + count = cursor.getInt(0); + }while (cursor.moveToNext()); + } + + return count; + } } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java b/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java index 03e2dab..5c7298f 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java @@ -13,6 +13,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; +import com.andremion.counterfab.CounterFab; import com.cepheuen.elegantnumberbutton.view.ElegantNumberButton; import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; @@ -44,7 +45,8 @@ public class FoodDetail extends AppCompatActivity implements RatingDialogListene TextView food_name, food_price, food_description; ImageView food_image; CollapsingToolbarLayout collapsingToolbarLayout; - FloatingActionButton btnCart, btnRating; + FloatingActionButton btnRating; + CounterFab btnCart; ElegantNumberButton numberButton; RatingBar ratingBar; @@ -83,7 +85,7 @@ public class FoodDetail extends AppCompatActivity implements RatingDialogListene //Init view numberButton = (ElegantNumberButton) findViewById(R.id.number_button); - btnCart = (FloatingActionButton) findViewById(R.id.btnCart); + btnCart = findViewById(R.id.btnCart); btnRating = (FloatingActionButton) findViewById(R.id.btnRating); ratingBar = (RatingBar) findViewById(R.id.ratingBar); @@ -105,10 +107,12 @@ public class FoodDetail extends AppCompatActivity implements RatingDialogListene currentFood.getDiscount() )); - Toast.makeText(FoodDetail.this, "Added to Cart", Toast.LENGTH_SHORT).show(); + Toast.makeText(FoodDetail.this, "Đã thêm vào giỏ hàng!", Toast.LENGTH_SHORT).show(); } }); + btnCart.setCount(new Database(this).getCountCart()); + food_description = (TextView) findViewById(R.id.food_description); food_name = (TextView) findViewById(R.id.food_name); food_price = (TextView) findViewById(R.id.food_price); 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 9172049..3d2e78d 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java @@ -28,6 +28,7 @@ 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.Model.Order; import com.waterbase.foodify.ViewHolder.FoodViewHolder; import java.util.ArrayList; @@ -248,6 +249,22 @@ public class FoodList extends AppCompatActivity { viewHolder.food_price.setText(String.format("%s đ", model.getPrice())); Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image); + //Quick Cart + viewHolder.quick_cart.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new Database(getBaseContext()).addToCart(new Order( + adapter.getRef(position).getKey(), + model.getName(), + "1", + model.getPrice(), + model.getDiscount() + )); + + Toast.makeText(FoodList.this, "Đã thêm vào giỏ hàng!", Toast.LENGTH_SHORT).show(); + } + }); + //Add Favorites if(localDB.isFavorite(adapter.getRef(position).getKey())) viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_24); 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 a4b6c32..909188c 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Home.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Home.java @@ -8,6 +8,8 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.animation.AnimationUtils; +import android.view.animation.LayoutAnimationController; import android.widget.TextView; import android.widget.Toast; @@ -22,10 +24,12 @@ import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import com.andremion.counterfab.CounterFab; import com.firebase.ui.database.FirebaseRecyclerAdapter; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.Task; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.navigation.NavigationView; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; @@ -33,6 +37,7 @@ import com.google.firebase.iid.FirebaseInstanceId; import com.rengwuxian.materialedittext.MaterialEditText; 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.Category; import com.waterbase.foodify.Model.Token; @@ -60,6 +65,8 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati SwipeRefreshLayout swipeRefreshLayout; + CounterFab fab; + @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); @@ -85,6 +92,17 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati toolbar.setTitle("Menu"); setSupportActionBar(toolbar); + //Floating Action Button + fab = findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(Home.this, Cart.class)); + } + }); + + fab.setCount(new Database(this).getCountCart()); + //View swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout); swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary, @@ -128,33 +146,6 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati database = FirebaseDatabase.getInstance(); category = database.getReference("Category"); - //Init paper - Paper.init(this); - - //Load menu - recyler_menu = (RecyclerView) findViewById(R.id.recyler_menu); - recyler_menu.setHasFixedSize(true); -// layoutManager = new LinearLayoutManager(this); -// recyler_menu.setLayoutManager(layoutManager); - recyler_menu.setLayoutManager(new GridLayoutManager(this, 2)); - - //Set name for user - View headerView = navigationView.getHeaderView(0); - TextView navUserName = (TextView) headerView.findViewById(R.id.txtFullName); - navUserName.setText(Common.currentUser.getName()); - - updateToken(FirebaseInstanceId.getInstance().getToken()); - - } - - private void updateToken(String token) { - FirebaseDatabase db = FirebaseDatabase.getInstance(); - DatabaseReference tokens = db.getReference("Tokens"); - Token data = new Token(token, false); - tokens.child(Common.currentUser.getPhone()).setValue(data); - } - - private void loadMenu() { adapter = new FirebaseRecyclerAdapter(Category.class, R.layout.menu_item, MenuViewHolder.class, category) { @Override protected void populateViewHolder(MenuViewHolder viewHolder, Category model, int position) { @@ -174,8 +165,47 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati }); } }; + + //Init paper + Paper.init(this); + + //Load menu + recyler_menu = (RecyclerView) findViewById(R.id.recyler_menu); + recyler_menu.setLayoutManager(new GridLayoutManager(this, 2)); + LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation(recyler_menu.getContext(), + R.anim.layout_fall_down); + recyler_menu.setLayoutAnimation(controller); + + //Set name for user + View headerView = navigationView.getHeaderView(0); + TextView navUserName = (TextView) headerView.findViewById(R.id.txtFullName); + navUserName.setText(Common.currentUser.getName()); + + updateToken(FirebaseInstanceId.getInstance().getToken()); + + } + + @Override + protected void onResume() { + super.onResume(); + fab.setCount(new Database(this).getCountCart()); + } + + private void updateToken(String token) { + FirebaseDatabase db = FirebaseDatabase.getInstance(); + DatabaseReference tokens = db.getReference("Tokens"); + Token data = new Token(token, false); + tokens.child(Common.currentUser.getPhone()).setValue(data); + } + + private void loadMenu() { + recyler_menu.setAdapter(adapter); swipeRefreshLayout.setRefreshing(false); + + //Animation + recyler_menu.getAdapter().notifyDataSetChanged(); + recyler_menu.scheduleLayoutAnimation(); } @Override @@ -285,4 +315,5 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati AlertDialog dialog = alertDialog.create(); dialog.show(); } + } \ No newline at end of file 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 bd1ccb2..b77ea39 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, food_price; - public ImageView food_image, fav_image; + public ImageView food_image, fav_image, quick_cart; private ItemClickListener itemClickListener; @@ -28,6 +28,7 @@ public class FoodViewHolder extends RecyclerView.ViewHolder implements View.OnCl 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); + quick_cart = (ImageView) itemView.findViewById(R.id.btn_quick_cart); itemView.setOnClickListener(this); } diff --git a/Foodify/app/src/main/res/anim/item_animation_fall_down.xml b/Foodify/app/src/main/res/anim/item_animation_fall_down.xml new file mode 100644 index 0000000..a97e951 --- /dev/null +++ b/Foodify/app/src/main/res/anim/item_animation_fall_down.xml @@ -0,0 +1,26 @@ + + + + + + + + + \ No newline at end of file diff --git a/Foodify/app/src/main/res/anim/layout_fall_down.xml b/Foodify/app/src/main/res/anim/layout_fall_down.xml new file mode 100644 index 0000000..e78fe0e --- /dev/null +++ b/Foodify/app/src/main/res/anim/layout_fall_down.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/Foodify/app/src/main/res/drawable/background2.jpg b/Foodify/app/src/main/res/drawable/background2.jpg new file mode 100644 index 0000000..84982d5 Binary files /dev/null and b/Foodify/app/src/main/res/drawable/background2.jpg differ diff --git a/Foodify/app/src/main/res/layout/activity_food_detail.xml b/Foodify/app/src/main/res/layout/activity_food_detail.xml index c70a312..a2615fc 100644 --- a/Foodify/app/src/main/res/layout/activity_food_detail.xml +++ b/Foodify/app/src/main/res/layout/activity_food_detail.xml @@ -36,12 +36,13 @@ - + + \ No newline at end of file diff --git a/Foodify/app/src/main/res/layout/food_item.xml b/Foodify/app/src/main/res/layout/food_item.xml index 6d60c3e..e112d87 100644 --- a/Foodify/app/src/main/res/layout/food_item.xml +++ b/Foodify/app/src/main/res/layout/food_item.xml @@ -52,12 +52,28 @@ - + + + + + + \ No newline at end of file diff --git a/Foodify/app/src/main/res/layout/menu_item.xml b/Foodify/app/src/main/res/layout/menu_item.xml index e3e73d9..094761b 100644 --- a/Foodify/app/src/main/res/layout/menu_item.xml +++ b/Foodify/app/src/main/res/layout/menu_item.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" app:cardElevation="10dp" - android:layout_margin="10dp" + android:layout_margin="8dp" app:cardCornerRadius="0dp" > diff --git a/Foodify/app/src/main/res/values/dimens.xml b/Foodify/app/src/main/res/values/dimens.xml index 4ab4520..d85dd3d 100644 --- a/Foodify/app/src/main/res/values/dimens.xml +++ b/Foodify/app/src/main/res/values/dimens.xml @@ -5,4 +5,6 @@ 8dp 176dp 16dp + + 300 \ No newline at end of file diff --git a/Foodify/build.gradle b/Foodify/build.gradle index 9e1a945..74b32eb 100644 --- a/Foodify/build.gradle +++ b/Foodify/build.gradle @@ -4,14 +4,14 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.1' + classpath 'com.android.tools.build:gradle:7.2.1' classpath 'com.google.gms:google-services:4.3.10' } } plugins { - id 'com.android.application' version '7.2.0' apply false - id 'com.android.library' version '7.2.0' apply false + id 'com.android.application' version '7.2.1' apply false + id 'com.android.library' version '7.2.1' apply false } allprojects {