mirror of
https://github.com/Nezumi-2711/PRM392.git
synced 2026-09-22 05:41:45 +00:00
440 lines
17 KiB
Java
440 lines
17 KiB
Java
package com.waterbase.foodifyServer;
|
|
|
|
import android.app.ProgressDialog;
|
|
import android.content.DialogInterface;
|
|
import android.content.Intent;
|
|
import android.net.Uri;
|
|
import android.os.Bundle;
|
|
import android.view.LayoutInflater;
|
|
import android.view.MenuItem;
|
|
import android.view.View;
|
|
import android.view.Menu;
|
|
import android.view.ViewGroup;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
import com.firebase.ui.database.FirebaseRecyclerAdapter;
|
|
import com.firebase.ui.database.FirebaseRecyclerOptions;
|
|
import com.google.android.gms.tasks.OnSuccessListener;
|
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
|
import com.google.android.material.snackbar.Snackbar;
|
|
import com.google.android.material.navigation.NavigationView;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.appcompat.app.ActionBarDrawerToggle;
|
|
import androidx.appcompat.app.AlertDialog;
|
|
import androidx.appcompat.widget.Toolbar;
|
|
import androidx.core.view.GravityCompat;
|
|
import androidx.drawerlayout.widget.DrawerLayout;
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
import com.google.firebase.database.DataSnapshot;
|
|
import com.google.firebase.database.DatabaseError;
|
|
import com.google.firebase.database.DatabaseReference;
|
|
import com.google.firebase.database.FirebaseDatabase;
|
|
import com.google.firebase.database.Query;
|
|
import com.google.firebase.database.ValueEventListener;
|
|
import com.google.firebase.iid.FirebaseInstanceId;
|
|
import com.google.firebase.storage.FirebaseStorage;
|
|
import com.google.firebase.storage.OnProgressListener;
|
|
import com.google.firebase.storage.StorageReference;
|
|
import com.google.firebase.storage.UploadTask;
|
|
import com.rengwuxian.materialedittext.MaterialEditText;
|
|
import com.squareup.picasso.Picasso;
|
|
import com.waterbase.foodifyServer.Model.Category;
|
|
import com.waterbase.foodifyServer.Common.Common;
|
|
import com.waterbase.foodifyServer.Interface.ItemClickListener;
|
|
import com.waterbase.foodifyServer.Model.Token;
|
|
import com.waterbase.foodifyServer.ViewHolder.MenuViewHolder;
|
|
|
|
import java.util.UUID;
|
|
|
|
import info.hoang8f.widget.FButton;
|
|
|
|
public class Home extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
|
|
|
|
TextView txtFullName;
|
|
|
|
//Firebase
|
|
FirebaseDatabase database;
|
|
DatabaseReference categories;
|
|
FirebaseStorage storage;
|
|
StorageReference storageReference;
|
|
FirebaseRecyclerAdapter<Category, MenuViewHolder> adapter;
|
|
|
|
//View
|
|
RecyclerView recycler_menu;
|
|
RecyclerView.LayoutManager layoutManager;
|
|
|
|
//Add new Menu Layout
|
|
MaterialEditText edtName;
|
|
FButton btnUpload, btnSelect;
|
|
|
|
Category newCategory;
|
|
|
|
Uri saveUri;
|
|
|
|
|
|
DrawerLayout drawer;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
setContentView(R.layout.activity_home);
|
|
|
|
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
|
toolbar.setTitle("Menu Management");
|
|
setSupportActionBar(toolbar);
|
|
|
|
//Init database
|
|
database = FirebaseDatabase.getInstance();
|
|
categories = database.getReference("Category");
|
|
storage = FirebaseStorage.getInstance();
|
|
storageReference = storage.getReference();
|
|
|
|
FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fab);
|
|
fab.setOnClickListener((view) -> {
|
|
showDialog();
|
|
});
|
|
|
|
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
|
|
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.app_name, R.string.app_name);
|
|
drawer.setDrawerListener(toggle);
|
|
toggle.syncState();
|
|
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
|
|
navigationView.setNavigationItemSelectedListener(this);
|
|
|
|
//Set Name for user
|
|
View headerView = navigationView.getHeaderView(0);
|
|
txtFullName = (TextView) headerView.findViewById(R.id.txtFullName);
|
|
txtFullName.setText(Common.currentUser.getName());
|
|
|
|
//Init View
|
|
recycler_menu = (RecyclerView) findViewById(R.id.recyler_menu);
|
|
recycler_menu.setHasFixedSize(true);
|
|
layoutManager = new LinearLayoutManager(this);
|
|
recycler_menu.setLayoutManager(layoutManager);
|
|
|
|
loadMenu();
|
|
|
|
//Send token
|
|
updateToken(FirebaseInstanceId.getInstance().getToken());
|
|
|
|
}
|
|
|
|
private void updateToken(String token) {
|
|
FirebaseDatabase db = FirebaseDatabase.getInstance();
|
|
DatabaseReference tokens = db.getReference("Tokens");
|
|
Token data = new Token(token, true);
|
|
tokens.child(Common.currentUser.getPhone()).setValue(data);
|
|
}
|
|
|
|
private void showDialog() {
|
|
AlertDialog.Builder alertDialog = new AlertDialog.Builder(Home.this);
|
|
alertDialog.setTitle("Thêm danh mục:");
|
|
alertDialog.setMessage("Vui lòng điền đầy đủ thông tin");
|
|
|
|
LayoutInflater inflater = this.getLayoutInflater();
|
|
View add_menu_layout = inflater.inflate(R.layout.add_new_menu_layout, null);
|
|
|
|
edtName = add_menu_layout.findViewById(R.id.edtName);
|
|
btnSelect = add_menu_layout.findViewById(R.id.btnSelect);
|
|
btnUpload = add_menu_layout.findViewById(R.id.btnUpload);
|
|
|
|
//Event for button
|
|
btnSelect.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
chooseImage(); //Let user select image from Gallery and save Uri of this image
|
|
}
|
|
});
|
|
|
|
btnUpload.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
uploadImage();
|
|
}
|
|
});
|
|
|
|
alertDialog.setView(add_menu_layout);
|
|
alertDialog.setIcon(R.drawable.ic_baseline_shopping_cart_24);
|
|
|
|
alertDialog.setPositiveButton("Thêm", new DialogInterface.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
dialog.dismiss();
|
|
|
|
//Upload new category
|
|
if(newCategory != null) {
|
|
categories.push().setValue(newCategory);
|
|
Snackbar.make(drawer, "Danh mục " + newCategory.getName() + " đã được thêm", Snackbar.LENGTH_SHORT)
|
|
.show();
|
|
}
|
|
}
|
|
});
|
|
|
|
alertDialog.setNegativeButton("Thoát", new DialogInterface.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
dialog.dismiss();
|
|
}
|
|
});
|
|
alertDialog.show();
|
|
}
|
|
|
|
private void uploadImage() {
|
|
if(saveUri != null) {
|
|
ProgressDialog mDialog = new ProgressDialog(this);
|
|
mDialog.setMessage("Đang tải lên....");
|
|
mDialog.show();
|
|
|
|
String imageName = UUID.randomUUID().toString();
|
|
StorageReference imageFolder = storageReference.child("/images/" + imageName);
|
|
imageFolder.putFile(saveUri)
|
|
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
|
|
@Override
|
|
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
|
|
mDialog.dismiss();
|
|
Toast.makeText(Home.this, "Đã tải lên thành công!", Toast.LENGTH_SHORT).show();
|
|
imageFolder.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
|
|
@Override
|
|
public void onSuccess(Uri uri) {
|
|
//Set value for new Category if image upload and we can get download link
|
|
newCategory = new Category(edtName.getText().toString(), uri.toString());
|
|
|
|
}
|
|
});
|
|
}
|
|
})
|
|
.addOnFailureListener((e) -> {
|
|
mDialog.dismiss();
|
|
Toast.makeText(Home.this, e.getMessage(), Toast.LENGTH_SHORT).show();
|
|
})
|
|
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
|
|
@Override
|
|
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
|
|
double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
|
|
mDialog.setMessage("Đang tải " + progress + "%");
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onResume() {
|
|
super.onResume();
|
|
loadMenu();
|
|
}
|
|
|
|
@Override
|
|
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
|
super.onActivityResult(requestCode, resultCode, data);
|
|
|
|
if(requestCode == Common.PICK_IMAGE_REQUEST && resultCode == RESULT_OK
|
|
&& data != null && data.getData() != null) {
|
|
saveUri = data.getData();
|
|
btnSelect.setText("Ảnh đã được chọn!");
|
|
}
|
|
}
|
|
|
|
private void chooseImage() {
|
|
Intent intent = new Intent();
|
|
intent.setType("image/*");
|
|
intent.setAction(Intent.ACTION_GET_CONTENT);
|
|
startActivityForResult(Intent.createChooser(intent, "Select Picture"), Common.PICK_IMAGE_REQUEST);
|
|
}
|
|
|
|
private void loadMenu() {
|
|
|
|
FirebaseRecyclerOptions<Category> options = new FirebaseRecyclerOptions.Builder<Category>()
|
|
.setQuery(categories, Category.class)
|
|
.build();
|
|
|
|
adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder>(options) {
|
|
@Override
|
|
protected void onBindViewHolder(@NonNull MenuViewHolder viewHolder, int i, @NonNull Category model) {
|
|
viewHolder.txtMenuName.setText(model.getName());
|
|
Picasso.with(Home.this).load(model.getImage()).into(viewHolder.imageView);
|
|
|
|
viewHolder.setItemClickListener(new ItemClickListener() {
|
|
@Override
|
|
public void onClick(View view, int position, boolean isLongClick) {
|
|
//send Category Id and Start new Activity
|
|
Intent foodList = new Intent(Home.this, FoodList.class);
|
|
foodList.putExtra("CategoryId", adapter.getRef(position).getKey());
|
|
startActivity(foodList);
|
|
}
|
|
});
|
|
}
|
|
|
|
@NonNull
|
|
@Override
|
|
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
View itemView = LayoutInflater.from(parent.getContext())
|
|
.inflate(R.layout.menu_item, parent, false);
|
|
return new MenuViewHolder(itemView);
|
|
}
|
|
};
|
|
adapter.startListening();
|
|
|
|
adapter.notifyDataSetChanged(); //Refresh data if have data changed
|
|
recycler_menu.setAdapter(adapter);
|
|
}
|
|
|
|
@Override
|
|
protected void onStop() {
|
|
super.onStop();
|
|
adapter.stopListening();
|
|
}
|
|
|
|
@Override
|
|
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
|
|
int id = item.getItemId();
|
|
|
|
if(id == R.id.nav_orders) {
|
|
Intent orders = new Intent(Home.this, OrderStatus.class);
|
|
startActivity(orders);
|
|
} else if(id == R.id.nav_banner) {
|
|
Intent banner = new Intent(Home.this, BannerActivity.class);
|
|
startActivity(banner);
|
|
} else if(id == R.id.nav_message) {
|
|
Intent banner = new Intent(Home.this, SendMessage.class);
|
|
startActivity(banner);
|
|
}
|
|
|
|
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
|
|
drawerLayout.closeDrawer(GravityCompat.START);
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean onContextItemSelected(@NonNull MenuItem item) {
|
|
if(item.getTitle(). equals(Common.UPDATE))
|
|
{
|
|
showUpdateDialog(adapter.getRef(item.getOrder()).getKey(), adapter.getItem(item.getOrder()));
|
|
} else if(item.getTitle().equals(Common.DELETE))
|
|
{
|
|
deleteCategory(adapter.getRef(item.getOrder()).getKey());
|
|
}
|
|
|
|
return super.onContextItemSelected(item);
|
|
}
|
|
|
|
private void deleteCategory(String key) {
|
|
|
|
//Get all food in category
|
|
DatabaseReference foods = database.getReference("Foods");
|
|
Query foodInCategory = foods.orderByChild("menuId").equalTo(key);
|
|
foodInCategory.addListenerForSingleValueEvent(new ValueEventListener() {
|
|
@Override
|
|
public void onDataChange(DataSnapshot dataSnapshot) {
|
|
for(DataSnapshot postSnapShot: dataSnapshot.getChildren()) {
|
|
postSnapShot.getRef().removeValue();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onCancelled(DatabaseError databaseError) {
|
|
|
|
}
|
|
});
|
|
|
|
categories.child(key).removeValue();
|
|
Toast.makeText(this, "Xoá thành công!", Toast.LENGTH_SHORT).show();
|
|
}
|
|
|
|
private void showUpdateDialog(String key, Category item) {
|
|
AlertDialog.Builder alertDialog = new AlertDialog.Builder(Home.this);
|
|
alertDialog.setTitle("Cập nhật danh mục:");
|
|
alertDialog.setMessage("Vui lòng điền đầy đủ thông tin");
|
|
|
|
LayoutInflater inflater = this.getLayoutInflater();
|
|
View add_menu_layout = inflater.inflate(R.layout.add_new_menu_layout, null);
|
|
|
|
edtName = add_menu_layout.findViewById(R.id.edtName);
|
|
btnSelect = add_menu_layout.findViewById(R.id.btnSelect);
|
|
btnUpload = add_menu_layout.findViewById(R.id.btnUpload);
|
|
|
|
//Set default name
|
|
edtName.setText(item.getName());
|
|
|
|
//Event for button
|
|
btnSelect.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
chooseImage(); //Let user select image from Gallery and save Uri of this image
|
|
}
|
|
});
|
|
|
|
btnUpload.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
changeImage(item);
|
|
}
|
|
});
|
|
|
|
alertDialog.setView(add_menu_layout);
|
|
alertDialog.setIcon(R.drawable.ic_baseline_shopping_cart_24);
|
|
|
|
alertDialog.setPositiveButton("Cập nhật", new DialogInterface.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
dialog.dismiss();
|
|
|
|
//Update information
|
|
item.setName(edtName.getText().toString());
|
|
categories.child(key).setValue(item);
|
|
}
|
|
});
|
|
|
|
alertDialog.setNegativeButton("Thoát", new DialogInterface.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
dialog.dismiss();
|
|
}
|
|
});
|
|
alertDialog.show();
|
|
}
|
|
|
|
private void changeImage(Category item) {
|
|
if(saveUri != null) {
|
|
ProgressDialog mDialog = new ProgressDialog(this);
|
|
mDialog.setMessage("Đang tải lên....");
|
|
mDialog.show();
|
|
|
|
String imageName = UUID.randomUUID().toString();
|
|
StorageReference imageFolder = storageReference.child("/images/" + imageName);
|
|
imageFolder.putFile(saveUri)
|
|
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
|
|
@Override
|
|
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
|
|
mDialog.dismiss();
|
|
Toast.makeText(Home.this, "Đã cập nhật ảnh thành công!", Toast.LENGTH_SHORT).show();
|
|
imageFolder.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
|
|
@Override
|
|
public void onSuccess(Uri uri) {
|
|
item.setImage(uri.toString());
|
|
|
|
}
|
|
});
|
|
}
|
|
})
|
|
.addOnFailureListener((e) -> {
|
|
mDialog.dismiss();
|
|
Toast.makeText(Home.this, e.getMessage(), Toast.LENGTH_SHORT).show();
|
|
})
|
|
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
|
|
@Override
|
|
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
|
|
double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
|
|
mDialog.setMessage("Đang tải " + progress + "%");
|
|
}
|
|
});
|
|
}
|
|
}
|
|
} |