Files
PRM392/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Home.java
T

382 lines
15 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.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
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.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
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.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
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.Common.Category;
import com.waterbase.foodifyServer.Common.Common;
import com.waterbase.foodifyServer.Interface.ItemClickListener;
import com.waterbase.foodifyServer.ViewHolder.MenuViewHolder;
import com.waterbase.foodifyServer.databinding.ActivityHomeBinding;
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;
private final int PICK_IMAGE_REQUEST = 71;
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();
}
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 onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 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"), PICK_IMAGE_REQUEST);
}
private void loadMenu() {
adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder>(
Category.class,
R.layout.menu_item,
MenuViewHolder.class,
categories
) {
@Override
protected void populateViewHolder(MenuViewHolder viewHolder, Category model, int i) {
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) {
}
});
}
};
adapter.notifyDataSetChanged(); //Refresh data if have data changed
recycler_menu.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home, menu);
return true;
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
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) {
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 + "%");
}
});
}
}
}