diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Cart.java b/Foodify/app/src/main/java/com/waterbase/foodify/Cart.java index c962bde..be78b9a 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Cart.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Cart.java @@ -66,7 +66,10 @@ public class Cart extends AppCompatActivity { btnPlace.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - showAlertDialog(); + if(cart.size() > 0) + showAlertDialog(); + else + Toast.makeText(Cart.this, "Giỏ hàng của bạn đang trống!!!", Toast.LENGTH_SHORT).show(); } }); @@ -130,6 +133,7 @@ public class Cart extends AppCompatActivity { private void loadListFood() { cart = new Database(this).getCarts(); adapter = new CartAdapter(cart, this); + adapter.notifyDataSetChanged(); recyclerView.setAdapter(adapter); //Calculate total price @@ -151,4 +155,23 @@ public class Cart extends AppCompatActivity { } return super.onOptionsItemSelected(item); } + + @Override + public boolean onContextItemSelected(@NonNull MenuItem item) { + if(item.getTitle().equals(Common.DELETE)) + deleteCart(item.getOrder()); + return true; + } + + private void deleteCart(int position) { + //Remove item at List by position + cart.remove(position); + //Delete all old data from SQLite + new Database(this).cleanCart(); + //Update new data from List to SQLite + for(Order item: cart) + new Database(this).addToCart(item); + //Refresh + loadListFood(); + } } \ No newline at end of file diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Common/Common.java b/Foodify/app/src/main/java/com/waterbase/foodify/Common/Common.java index 3ee38c3..13be174 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Common/Common.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Common/Common.java @@ -1,10 +1,16 @@ package com.waterbase.foodify.Common; +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + import com.waterbase.foodify.Model.User; public class Common { public static User currentUser; + public static final String DELETE = "Xoá"; + public static String convertCodeToStatus(String status) { if(status.equals("0")) return "Placed"; @@ -13,4 +19,20 @@ public class Common { else return "Shipped"; } + + public static boolean isConnectedToInternet(Context context) { + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + + if(connectivityManager != null) { + NetworkInfo[] info = connectivityManager.getAllNetworkInfo(); + if(info != null){ + for (int i = 0; i < info.length; i++) { + if(info[i].getState() == NetworkInfo.State.CONNECTED) + return true; + } + } + } + + return false; + } } 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 16db8bc..8dc11be 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java @@ -20,6 +20,7 @@ import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import com.squareup.picasso.Picasso; +import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Database.Database; import com.waterbase.foodify.Model.Food; import com.waterbase.foodify.Model.Order; @@ -81,7 +82,12 @@ public class FoodDetail extends AppCompatActivity { if(getIntent() != null) foodId = getIntent().getStringExtra("FoodId"); if(!foodId.isEmpty()) { - getDetailFood(foodId); + if(Common.isConnectedToInternet(getBaseContext())) + getDetailFood(foodId); + else { + Toast.makeText(FoodDetail.this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show(); + return; + } } setTitle("Chi tiết"); 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 4979a11..4ebc257 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java @@ -22,6 +22,7 @@ import com.google.firebase.database.FirebaseDatabase; 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.Interface.ItemClickListener; import com.waterbase.foodify.Model.Food; import com.waterbase.foodify.ViewHolder.FoodViewHolder; @@ -65,7 +66,12 @@ public class FoodList extends AppCompatActivity { categoryId = getIntent().getStringExtra("CategoryId"); categoryName = getIntent().getStringExtra("CategoryName"); if(!categoryId.isEmpty() && categoryId != null) { - loadListFood(categoryId); + if(Common.isConnectedToInternet(getBaseContext())) + loadListFood(categoryId); + else { + Toast.makeText(FoodList.this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show(); + return; + } } //Search 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 e792696..b5997cc 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Home.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Home.java @@ -6,6 +6,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBarDrawerToggle; @@ -68,7 +69,13 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati layoutManager = new LinearLayoutManager(this); recyler_menu.setLayoutManager(layoutManager); - loadMenu(); + if(Common.isConnectedToInternet(getBaseContext())) + loadMenu(); + else { + Toast.makeText(this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show(); + return; + } + //Set name for user View headerView = navigationView.getHeaderView(0); @@ -109,6 +116,14 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati return true; } + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if(item.getItemId() == R.id.refresh) + loadMenu(); + + return super.onOptionsItemSelected(item); + } + @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/SignIn.java b/Foodify/app/src/main/java/com/waterbase/foodify/SignIn.java index 5dac34a..7a47a52 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/SignIn.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/SignIn.java @@ -48,46 +48,51 @@ public class SignIn extends AppCompatActivity { @Override public void onClick(View v) { - final ProgressDialog mDialog = new ProgressDialog(SignIn.this); - mDialog.setMessage("Please waiting..."); - mDialog.show(); + if (Common.isConnectedToInternet(getBaseContext())) { + final ProgressDialog mDialog = new ProgressDialog(SignIn.this); + mDialog.setMessage("Please waiting..."); + mDialog.show(); - table_user.addListenerForSingleValueEvent(new ValueEventListener() { + table_user.addListenerForSingleValueEvent(new ValueEventListener() { - @Override - public void onDataChange(DataSnapshot dataSnapshot) { - //Check phone and password is null or not - if(!edtPhone.getText().toString().isEmpty() && !edtPassword.getText().toString().isEmpty()){ - //Check if user not in database - if(dataSnapshot.child(edtPhone.getText().toString()).exists()){ - //Get User information - mDialog.dismiss(); - User user = dataSnapshot.child(edtPhone.getText().toString()).getValue(User.class); - user.setPhone(edtPhone.getText().toString()); - if(user.getPassword().equals(edtPassword.getText().toString())){ - Intent homeIntent = new Intent(SignIn.this, Home.class); - Common.currentUser = user; - startActivity(homeIntent); - finish(); + @Override + public void onDataChange(DataSnapshot dataSnapshot) { + //Check phone and password is null or not + if (!edtPhone.getText().toString().isEmpty() && !edtPassword.getText().toString().isEmpty()) { + //Check if user not in database + if (dataSnapshot.child(edtPhone.getText().toString()).exists()) { + //Get User information + mDialog.dismiss(); + User user = dataSnapshot.child(edtPhone.getText().toString()).getValue(User.class); + user.setPhone(edtPhone.getText().toString()); + if (user.getPassword().equals(edtPassword.getText().toString())) { + Intent homeIntent = new Intent(SignIn.this, Home.class); + Common.currentUser = user; + startActivity(homeIntent); + finish(); + } else { + Toast.makeText(SignIn.this, "Số điện thoại hoặc mật khẩu không đúng. Xin vui lòng thử lại!", Toast.LENGTH_SHORT).show(); + } } else { - Toast.makeText(SignIn.this, "Số điện thoại hoặc mật khẩu không đúng. Xin vui lòng thử lại!", Toast.LENGTH_SHORT).show(); + mDialog.dismiss(); + Toast.makeText(SignIn.this, "Số điện thoại chưa được đăng ký. Vui lòng đăng ký để sử dụng!", Toast.LENGTH_SHORT).show(); } } else { mDialog.dismiss(); - Toast.makeText(SignIn.this, "Số điện thoại chưa được đăng ký. Vui lòng đăng ký để sử dụng!", Toast.LENGTH_SHORT).show(); + Toast.makeText(SignIn.this, "Số điện thoại và mật khẩu không được để trống. Vui lòng thử lại!", Toast.LENGTH_SHORT).show(); } - } else{ - mDialog.dismiss(); - Toast.makeText(SignIn.this, "Số điện thoại và mật khẩu không được để trống. Vui lòng thử lại!", Toast.LENGTH_SHORT).show(); } - } - @Override - public void onCancelled(DatabaseError databaseError) { + @Override + public void onCancelled(DatabaseError databaseError) { - } - }); + } + }); + } else { + Toast.makeText(SignIn.this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show(); + return; + } } }); } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/SignUp.java b/Foodify/app/src/main/java/com/waterbase/foodify/SignUp.java index 37eaad1..b413a0c 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/SignUp.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/SignUp.java @@ -17,6 +17,7 @@ import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; +import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Model.User; public class SignUp extends AppCompatActivity { @@ -48,35 +49,40 @@ public class SignUp extends AppCompatActivity { btnSignUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - final ProgressDialog mDialog = new ProgressDialog(SignUp.this); - mDialog.setMessage("Please waiting..."); - mDialog.show(); + if (Common.isConnectedToInternet(getBaseContext())) { + final ProgressDialog mDialog = new ProgressDialog(SignUp.this); + mDialog.setMessage("Please waiting..."); + mDialog.show(); - table_user.addListenerForSingleValueEvent(new ValueEventListener() { - @Override - public void onDataChange(DataSnapshot dataSnapshot) { - //Check if already user phone - if(dataSnapshot.child(edtPhone.getText().toString()).exists()) { - mDialog.dismiss(); - Toast.makeText(SignUp.this, "Phone Number is already register!", Toast.LENGTH_SHORT).show(); - finish(); + table_user.addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(DataSnapshot dataSnapshot) { + //Check if already user phone + if (dataSnapshot.child(edtPhone.getText().toString()).exists()) { + mDialog.dismiss(); + Toast.makeText(SignUp.this, "Phone Number is already register!", Toast.LENGTH_SHORT).show(); + finish(); + } else { + mDialog.dismiss(); + User user = new User(edtName.getText().toString(), edtPassword.getText().toString()); + table_user.child(edtPhone.getText().toString()).setValue(user); + Toast.makeText(SignUp.this, "Sign up successfully!", Toast.LENGTH_SHORT).show(); + finish(); + } } - else { - mDialog.dismiss(); - User user = new User(edtName.getText().toString(), edtPassword.getText().toString()); - table_user.child(edtPhone.getText().toString()).setValue(user); - Toast.makeText(SignUp.this, "Sign up successfully!", Toast.LENGTH_SHORT).show(); - finish(); + + @Override + public void onCancelled(DatabaseError databaseError) { + } - } - - @Override - public void onCancelled(DatabaseError databaseError) { - - } - }); + }); + } else { + Toast.makeText(SignUp.this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show(); + return; + } } }); + } public void login(View view) { diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/CartAdapter.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/CartAdapter.java index 3d175cd..44d23ba 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/CartAdapter.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/CartAdapter.java @@ -2,6 +2,7 @@ package com.waterbase.foodify.ViewHolder; import android.content.Context; import android.graphics.Color; +import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -12,6 +13,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.amulyakhare.textdrawable.TextDrawable; +import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Interface.ItemClickListener; import com.waterbase.foodify.Model.Order; import com.waterbase.foodify.R; @@ -23,7 +25,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -class CartViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { +class CartViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener { public TextView txt_card_item, txt_price; public ImageView img_cart_count; @@ -39,12 +41,19 @@ class CartViewHolder extends RecyclerView.ViewHolder implements View.OnClickList txt_card_item = (TextView) itemView.findViewById(R.id.cart_item_name); txt_price = (TextView) itemView.findViewById(R.id.cart_item_Price); img_cart_count = (ImageView) itemView.findViewById(R.id.cart_item_count); + itemView.setOnCreateContextMenuListener(this); } @Override public void onClick(View v) { } + + @Override + public void onCreateContextMenu(ContextMenu contextMenu, View v, ContextMenu.ContextMenuInfo menuInfo) { + contextMenu.setHeaderTitle("Tuỳ chọn:"); + contextMenu.add(0, 0, getAdapterPosition(), Common.DELETE); + } } public class CartAdapter extends RecyclerView.Adapter{ diff --git a/Foodify/app/src/main/res/drawable/ic_baseline_refresh_24.xml b/Foodify/app/src/main/res/drawable/ic_baseline_refresh_24.xml new file mode 100644 index 0000000..98469ca --- /dev/null +++ b/Foodify/app/src/main/res/drawable/ic_baseline_refresh_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Foodify/app/src/main/res/menu/home.xml b/Foodify/app/src/main/res/menu/home.xml index ac68310..5336e7e 100644 --- a/Foodify/app/src/main/res/menu/home.xml +++ b/Foodify/app/src/main/res/menu/home.xml @@ -1,4 +1,11 @@ + + \ No newline at end of file diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Common.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Common.java index 4e6ec61..4f5d5cf 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Common.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Common.java @@ -33,7 +33,7 @@ public class Common { return RetrofitClient.getClient(baseUrl).create(IGeoCoordinates.class); } - public static Bitmap scaleBitmap(Bitmap bitmap, int newWidth, int newHeight) { + public static Bitmap scaleBitmap(Bitmap bitmap, int newWidth, int newHeight) { Bitmap scaledBitmap = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888); float scaleX = newWidth / (float)bitmap.getWidth();