mirror of
https://github.com/lucasroyerdev/stock-pignon.git
synced 2026-05-10 02:52:26 +00:00
165 lines
5.7 KiB
Java
165 lines
5.7 KiB
Java
// CartViewHelper.java
|
|
package com.stock.pignon;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.graphics.Color;
|
|
import android.graphics.Typeface;
|
|
import android.graphics.drawable.GradientDrawable;
|
|
import android.util.TypedValue;
|
|
import android.view.Gravity;
|
|
import android.view.View;
|
|
import android.widget.Button;
|
|
import android.widget.ImageView;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.TextView;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* UI Helper to dynamically build and update cart's list
|
|
*/
|
|
public class CartViewHelper {
|
|
|
|
/**
|
|
* Refreshes the entire cart side-panel or list
|
|
* Clears everything and rebuild on current CartManager data
|
|
*/
|
|
public static void updateCartView(LinearLayout cartList, Context context) {
|
|
if (cartList == null) return;
|
|
|
|
// Clear and get current items
|
|
cartList.removeAllViews();
|
|
List<CartItem> cartItems = CartManager.getItems();
|
|
|
|
// If empty cart, show it to user
|
|
if (cartItems.isEmpty()) {
|
|
TextView empty = new TextView(context);
|
|
empty.setText(context.getString(R.string.cart_empty));
|
|
empty.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
|
|
empty.setGravity(Gravity.CENTER);
|
|
empty.setPadding(0, 50, 0, 0);
|
|
cartList.addView(empty);
|
|
|
|
updateTotalDisplay(context, 0, 0);
|
|
return;
|
|
}
|
|
|
|
// Build list and calculate total at the same time
|
|
int totalMin = 0;
|
|
int totalMax = 0;
|
|
|
|
for (CartItem item : cartItems) {
|
|
totalMin += item.getTotalMin();
|
|
totalMax += item.getTotalMax();
|
|
|
|
// Create and add the row view
|
|
cartList.addView(createCartItemView(item, cartList, context));
|
|
}
|
|
|
|
// Display global price range at the end
|
|
updateTotalDisplay(context, totalMin, totalMax);
|
|
}
|
|
|
|
/**
|
|
* Updates the global price range at the bottom of the screen
|
|
*/
|
|
private static void updateTotalDisplay(Context context, int min, int max) {
|
|
TextView totalView = ((Activity) context).findViewById(R.id.totalView);
|
|
if (totalView != null) {
|
|
// Using string resources
|
|
totalView.setText(context.getString(R.string.price_range, min, max, "€"));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Creates a horizontal row for a single cart item
|
|
* Layout: [image] [name / [quantity / price]] [remove button]
|
|
*/
|
|
private static View createCartItemView(CartItem item, LinearLayout cartList, Context context) {
|
|
LinearLayout row = new LinearLayout(context);
|
|
row.setOrientation(LinearLayout.HORIZONTAL);
|
|
row.setGravity(Gravity.CENTER_VERTICAL);
|
|
|
|
// Layout parameters
|
|
LinearLayout.LayoutParams rowParams = new LinearLayout.LayoutParams(
|
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
|
LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
rowParams.setMargins(0, 10, 0, 10);
|
|
row.setLayoutParams(rowParams);
|
|
|
|
// Image
|
|
ImageView image = new ImageView(context);
|
|
ImageLoader.loadImage(image, item.getImageFile(),200,200);
|
|
LinearLayout.LayoutParams imgParams = new LinearLayout.LayoutParams(100, 100);
|
|
imgParams.setMargins(0, 0, 20, 0);
|
|
image.setLayoutParams(imgParams);
|
|
row.addView(image);
|
|
|
|
// Sublayout for name + [quantity + price]
|
|
LinearLayout infoLayout = new LinearLayout(context);
|
|
infoLayout.setOrientation(LinearLayout.VERTICAL);
|
|
infoLayout.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
|
|
|
|
// Name
|
|
TextView nameView = new TextView(context);
|
|
nameView.setText(item.getName());
|
|
nameView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
|
|
nameView.setTypeface(null, Typeface.BOLD);
|
|
infoLayout.addView(nameView);
|
|
|
|
// Quantity and price range
|
|
TextView detailsView = new TextView(context);
|
|
String details = context.getString(R.string.cart_item, item.getQuantity(), item.getTotalMin(), item.getTotalMax());
|
|
detailsView.setText(details);
|
|
detailsView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
|
|
infoLayout.addView(detailsView);
|
|
|
|
row.addView(infoLayout);
|
|
|
|
// Remove button
|
|
row.addView(createRemoveButton(item, cartList, context));
|
|
|
|
return row;
|
|
}
|
|
|
|
/**
|
|
* Creates the delete button
|
|
*/
|
|
private static Button createRemoveButton(CartItem item, LinearLayout cartList, Context context) {
|
|
Button btn = new Button(context);
|
|
btn.setText("✖");
|
|
btn.setTextSize(18);
|
|
btn.setTextColor(Color.WHITE);
|
|
btn.setGravity(Gravity.CENTER);
|
|
|
|
// Conversion DP to PX for consistent size on all screens
|
|
float scale = context.getResources().getDisplayMetrics().density;
|
|
int sizePx = (int) (48 * scale + 0.5f);
|
|
|
|
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(sizePx, sizePx);
|
|
btn.setLayoutParams(params);
|
|
|
|
// Background: grey rounded rectangle (API 17 fallback)
|
|
GradientDrawable shape = new GradientDrawable();
|
|
shape.setColor(Color.parseColor("#E53935")); // Reddish to indicate delete
|
|
shape.setCornerRadius(4 * scale);
|
|
btn.setBackground(shape);
|
|
|
|
btn.setOnClickListener(v -> {
|
|
// setting quantity to 0 removes the item
|
|
CartManager.addOrUpdateItem(
|
|
item.getName(),
|
|
item.getMinPrice(),
|
|
item.getMaxPrice(),
|
|
0, // Setting quantity to 0 triggers removal
|
|
item.getImageFile()
|
|
);
|
|
|
|
// visual refresh of the cart list
|
|
updateCartView(cartList, context);
|
|
});
|
|
|
|
return btn;
|
|
}
|
|
} |