From b4eb8e062d569421fc244718f6e97499a13bccf2 Mon Sep 17 00:00:00 2001 From: phanhuuloi27 <73208452+Nezumi2711@users.noreply.github.com> Date: Mon, 11 Jul 2022 22:17:31 +0700 Subject: [PATCH] Improve app, layout --- Foodify/app/build.gradle | 2 +- Foodify/app/src/main/AndroidManifest.xml | 5 +- .../com/waterbase/foodify/OrderDetail.java | 2 +- .../com/waterbase/foodify/OrderStatus.java | 59 ++++++++-- .../waterbase/foodify/OrderStatusDetail.java | 65 +++++++++++ .../foodify/ViewHolder/MyViewHolder.java | 25 +++++ .../ViewHolder/OrderDetailAdapter.java | 19 ---- .../ViewHolder/OrderStatusDetailAdapter.java | 64 +++++++++++ .../foodify/ViewHolder/OrderViewHolder.java | 3 +- .../drawable/ic_baseline_assignment_24.xml | 5 + .../layout/activity_order_status_detail.xml | 106 ++++++++++++++++++ .../app/src/main/res/layout/order_layout.xml | 33 +++++- 12 files changed, 347 insertions(+), 41 deletions(-) create mode 100644 Foodify/app/src/main/java/com/waterbase/foodify/OrderStatusDetail.java create mode 100644 Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/MyViewHolder.java create mode 100644 Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderStatusDetailAdapter.java create mode 100644 Foodify/app/src/main/res/drawable/ic_baseline_assignment_24.xml create mode 100644 Foodify/app/src/main/res/layout/activity_order_status_detail.xml diff --git a/Foodify/app/build.gradle b/Foodify/app/build.gradle index 3e7c351..258d299 100644 --- a/Foodify/app/build.gradle +++ b/Foodify/app/build.gradle @@ -10,7 +10,7 @@ android { minSdk 23 targetSdk 30 versionCode 1 - versionName "71.0" + versionName "73.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/Foodify/app/src/main/AndroidManifest.xml b/Foodify/app/src/main/AndroidManifest.xml index 95e1d3f..4b1b3dd 100644 --- a/Foodify/app/src/main/AndroidManifest.xml +++ b/Foodify/app/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ - + + diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/OrderDetail.java b/Foodify/app/src/main/java/com/waterbase/foodify/OrderDetail.java index f92f7c2..085c28d 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/OrderDetail.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/OrderDetail.java @@ -92,7 +92,7 @@ public class OrderDetail extends AppCompatActivity { btnPay = findViewById(R.id.btnPay); btnZaloPay = findViewById(R.id.btnZaloPay); - lstFoods = (RecyclerView) findViewById(R.id.lstFoods); + lstFoods = findViewById(R.id.lstFoods); lstFoods.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); lstFoods.setLayoutManager(layoutManager); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java index 61ffaef..a2f5c3d 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java @@ -1,15 +1,18 @@ package com.waterbase.foodify; -import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -24,11 +27,6 @@ import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Model.Request; import com.waterbase.foodify.ViewHolder.OrderViewHolder; -import io.github.inflationx.calligraphy3.CalligraphyConfig; -import io.github.inflationx.calligraphy3.CalligraphyInterceptor; -import io.github.inflationx.viewpump.ViewPump; -import io.github.inflationx.viewpump.ViewPumpContextWrapper; - public class OrderStatus extends AppCompatActivity { public RecyclerView recyclerView; @@ -86,6 +84,18 @@ public class OrderStatus extends AppCompatActivity { orderViewHolder.txtOrderAddress.setText("Địa chỉ: " + model.getAddress()); orderViewHolder.txtOrderDate.setText("Ngày đặt: " + Common.getDate(Long.parseLong(adapter.getRef(i).getKey()))); orderViewHolder.txtOrderPayment.setText("Tình trạng thanh toán: " + Common.convertCodePaymentToStatus(model.getPaymentStatus())); + + orderViewHolder.btn_detail.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //Pass object to another activity! + Intent intent = new Intent(OrderStatus.this, OrderStatusDetail.class); + intent.putExtra("requests", model); + startActivity(intent); + } + }); + + orderViewHolder.btn_delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -110,15 +120,34 @@ public class OrderStatus extends AppCompatActivity { } private void deleteOrder(String key) { - requests.child(key) - .removeValue().addOnSuccessListener(new OnSuccessListener() { + AlertDialog alertDialog = new AlertDialog.Builder(OrderStatus.this).setTitle("Xác nhận").setMessage("Bạn có muốn xoá đơn #" + key).setPositiveButton("Đồng ý",null) + .setNegativeButton("Thoát", null) + .create(); + + alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { + @Override + public void onShow(DialogInterface dialog) { + Button agree = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); + agree.setOnClickListener(new View.OnClickListener() { @Override - public void onSuccess(Void unused) { - Toast.makeText(OrderStatus.this, new StringBuilder("Đơn hàng ").append(key).append(" đã xoá!").toString(), Toast.LENGTH_SHORT).show(); + public void onClick(View v) { + requests.child(key) + .removeValue().addOnSuccessListener(new OnSuccessListener() { + @Override + public void onSuccess(Void unused) { + Toast.makeText(OrderStatus.this, new StringBuilder("Đơn hàng ").append(key).append(" đã xoá!").toString(), Toast.LENGTH_SHORT).show(); + } + }).addOnFailureListener((e) -> { + Toast.makeText(OrderStatus.this, e.getMessage(), Toast.LENGTH_SHORT).show(); + }); + alertDialog.dismiss(); } - }).addOnFailureListener((e) -> { - Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); }); + } + }); + + alertDialog.show(); + } @Override @@ -136,4 +165,10 @@ public class OrderStatus extends AppCompatActivity { } return super.onOptionsItemSelected(item); } + + @Override + protected void onResume() { + super.onResume(); + adapter.startListening(); + } } \ No newline at end of file diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatusDetail.java b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatusDetail.java new file mode 100644 index 0000000..fa03922 --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatusDetail.java @@ -0,0 +1,65 @@ +package com.waterbase.foodify; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.os.Bundle; +import android.text.TextUtils; +import android.widget.TextView; + +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; +import com.waterbase.foodify.Model.Request; +import com.waterbase.foodify.ViewHolder.OrderDetailAdapter; +import com.waterbase.foodify.ViewHolder.OrderStatusDetailAdapter; + +public class OrderStatusDetail extends AppCompatActivity { + + TextView order_address, order_total, order_comment; + Request request; + RecyclerView lstFoods; + RecyclerView.LayoutManager layoutManager; + + FirebaseDatabase database; + DatabaseReference requests; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_order_status_detail); + + String comment = ""; + + setTitle("Thông tin chi tiết đơn hàng"); + + order_address = findViewById(R.id.order_address); + order_total = findViewById(R.id.order_total); + order_comment = findViewById(R.id.order_comment); + + lstFoods = findViewById(R.id.lstFoods); + lstFoods.setHasFixedSize(true); + layoutManager = new LinearLayoutManager(this); + lstFoods.setLayoutManager(layoutManager); + + //Firebase + database = FirebaseDatabase.getInstance(); + requests = database.getReference("Requests"); + + if (getIntent() != null) + request = (Request) getIntent().getSerializableExtra("requests"); + + //Set value + order_total.setText("Tổng cộng: " + request.getTotal()); + order_address.setText("Địa chỉ giao: " + request.getAddress()); + if (TextUtils.isEmpty(request.getComment())) + comment = "Không có"; + else + comment = request.getComment(); + order_comment.setText("Ghi chú: " + comment); + + OrderStatusDetailAdapter adapter = new OrderStatusDetailAdapter(request.getFoods(), this); + adapter.notifyDataSetChanged(); + lstFoods.setAdapter(adapter); + } +} \ No newline at end of file diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/MyViewHolder.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/MyViewHolder.java new file mode 100644 index 0000000..cc5e526 --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/MyViewHolder.java @@ -0,0 +1,25 @@ +package com.waterbase.foodify.ViewHolder; + +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.waterbase.foodify.R; + +public class MyViewHolder extends RecyclerView.ViewHolder { + + public TextView name, quantity, price, discount; + public ImageView cart_image; + + public MyViewHolder(@NonNull View itemView) { + super(itemView); + name = (TextView) itemView.findViewById(R.id.product_name); + quantity = (TextView) itemView.findViewById(R.id.product_quantity); + price = (TextView) itemView.findViewById(R.id.product_price); + discount = (TextView) itemView.findViewById(R.id.product_discount); + cart_image = (ImageView) itemView.findViewById(R.id.cart_image); + } +} diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderDetailAdapter.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderDetailAdapter.java index 96e7caa..3d7a754 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderDetailAdapter.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderDetailAdapter.java @@ -3,15 +3,11 @@ package com.waterbase.foodify.ViewHolder; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; - import com.squareup.picasso.Picasso; -import com.waterbase.foodify.Cart; import com.waterbase.foodify.Model.Order; import com.waterbase.foodify.OrderDetail; import com.waterbase.foodify.R; @@ -20,21 +16,6 @@ import java.text.NumberFormat; import java.util.List; import java.util.Locale; -class MyViewHolder extends RecyclerView.ViewHolder { - - public TextView name, quantity, price, discount; - public ImageView cart_image; - - public MyViewHolder(@NonNull View itemView) { - super(itemView); - name = (TextView) itemView.findViewById(R.id.product_name); - quantity = (TextView) itemView.findViewById(R.id.product_quantity); - price = (TextView) itemView.findViewById(R.id.product_price); - discount = (TextView) itemView.findViewById(R.id.product_discount); - cart_image = (ImageView) itemView.findViewById(R.id.cart_image); - } -} - public class OrderDetailAdapter extends RecyclerView.Adapter{ List myOrders; diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderStatusDetailAdapter.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderStatusDetailAdapter.java new file mode 100644 index 0000000..7d6c4f1 --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderStatusDetailAdapter.java @@ -0,0 +1,64 @@ +package com.waterbase.foodify.ViewHolder; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.squareup.picasso.Picasso; +import com.waterbase.foodify.Model.Order; +import com.waterbase.foodify.OrderStatusDetail; +import com.waterbase.foodify.R; + +import java.text.NumberFormat; +import java.util.List; +import java.util.Locale; + +public class OrderStatusDetailAdapter extends RecyclerView.Adapter{ + + List myOrders; + private OrderStatusDetail orderStatusDetail; + + public OrderStatusDetailAdapter(List myOrders, OrderStatusDetail orderStatusDetail) { + this.myOrders = myOrders; + this.orderStatusDetail = orderStatusDetail; + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.order_detail_layout, parent, false); + return new MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { + double totalPrice; + Order order = myOrders.get(position); + + Picasso.with(orderStatusDetail.getBaseContext()) + .load(myOrders.get(position).getImage()) + .resize(70,70) + .centerCrop() + .into(holder.cart_image); + + totalPrice = Double.parseDouble(order.getQuantity()) * Double.parseDouble(order.getPrice()); + Locale locale = new Locale("vi", "VN"); + NumberFormat fmt = NumberFormat.getCurrencyInstance(locale); + + + holder.name.setText(String.format("Món ăn: %s", order.getProductName())); + holder.quantity.setText(String.format("Số lượng: %s", order.getQuantity())); + holder.price.setText("Giá: " + fmt.format(totalPrice)); + holder.discount.setText(String.format("Giảm giá: %s", order.getDiscount())); + + } + + @Override + public int getItemCount() { + return myOrders.size(); + } +} diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderViewHolder.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderViewHolder.java index edc8eb7..c51245b 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderViewHolder.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderViewHolder.java @@ -14,7 +14,7 @@ public class OrderViewHolder extends RecyclerView.ViewHolder { public TextView txtOrderId, txtOrderStatus, txtOrderAddress, txtOrderDate, txtOrderPayment; - public ImageView btn_delete; + public ImageView btn_delete, btn_detail; public OrderViewHolder(@NonNull View itemView) { super(itemView); @@ -25,5 +25,6 @@ public class OrderViewHolder extends RecyclerView.ViewHolder { txtOrderDate = itemView.findViewById(R.id.order_date); txtOrderPayment = itemView.findViewById(R.id.order_payment); btn_delete = itemView.findViewById(R.id.btn_delete); + btn_detail = itemView.findViewById(R.id.btn_detail); } } diff --git a/Foodify/app/src/main/res/drawable/ic_baseline_assignment_24.xml b/Foodify/app/src/main/res/drawable/ic_baseline_assignment_24.xml new file mode 100644 index 0000000..57096c1 --- /dev/null +++ b/Foodify/app/src/main/res/drawable/ic_baseline_assignment_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Foodify/app/src/main/res/layout/activity_order_status_detail.xml b/Foodify/app/src/main/res/layout/activity_order_status_detail.xml new file mode 100644 index 0000000..a8d37d8 --- /dev/null +++ b/Foodify/app/src/main/res/layout/activity_order_status_detail.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Foodify/app/src/main/res/layout/order_layout.xml b/Foodify/app/src/main/res/layout/order_layout.xml index 5884f15..9a1abfc 100644 --- a/Foodify/app/src/main/res/layout/order_layout.xml +++ b/Foodify/app/src/main/res/layout/order_layout.xml @@ -77,14 +77,35 @@ android:layout_height="wrap_content" /> - + android:layout_gravity="center" + > + + + + + + + + \ No newline at end of file