diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 29f86bb..1566c55 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,6 +13,11 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
+
+
{
+ private List cartLineItems;
+
+ public CartAdapter(List categories) {
+ this.cartLineItems = cartLineItems;
+ }
+
+ @Override
+ public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ return new CartViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_cart_item, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(CartViewHolder holder, int position) {
+ holder.renderView(cartLineItems.get(position));
+ }
+
+
+ @Override
+ public int getItemCount() {
+ return cartLineItems.size() == 0 ? 0 : cartLineItems.size();
+ }
+}
diff --git a/app/src/main/java/me/gilo/wc/adapter/viewholder/CartViewHolder.kt b/app/src/main/java/me/gilo/wc/adapter/viewholder/CartViewHolder.kt
new file mode 100644
index 0000000..b440c1d
--- /dev/null
+++ b/app/src/main/java/me/gilo/wc/adapter/viewholder/CartViewHolder.kt
@@ -0,0 +1,51 @@
+package me.gilo.wc.adapter.viewholder
+
+import android.content.Context
+import android.content.Intent
+import android.support.v7.widget.RecyclerView
+import android.text.Html
+import android.view.View
+import android.widget.ImageView
+import android.widget.TextView
+import com.squareup.picasso.Picasso
+import me.gilo.woodroid.models.Product
+import android.text.Spannable
+import android.text.style.ForegroundColorSpan
+import android.text.SpannableString
+import android.graphics.Color
+import kotlinx.android.synthetic.main.content_product.*
+import me.gilo.wc.R
+import me.gilo.wc.models.CartLineItem
+import me.gilo.wc.ui.coupon.CouponActivity
+import me.gilo.wc.ui.product.ProductActivity
+import me.gilo.woodroid.models.CartItem
+
+
+class CartViewHolder(val context: Context, itemView: View) :
+ RecyclerView.ViewHolder(itemView) {
+
+ fun renderView(cartLineItem: CartLineItem) {
+ val ivImage = itemView.findViewById(R.id.ivImage)
+ val tvTitle = itemView.findViewById(R.id.tvTitle)
+ val tvPrice = itemView.findViewById(R.id.tvPrice)
+
+ tvTitle.text = cartLineItem.name
+
+ if (cartLineItem.imageUrl.isNotEmpty()){
+ Picasso.with(context).load(cartLineItem.imageUrl).into(ivImage)
+ }
+
+ tvPrice.text = cartLineItem.priceString;
+
+
+ itemView.setOnClickListener{
+ val intent = Intent(context, ProductActivity::class.java)
+ intent.putExtra("productId", cartLineItem.productId)
+
+ context.startActivity(intent)
+ }
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/me/gilo/wc/di/ActivitiesModule.java b/app/src/main/java/me/gilo/wc/di/ActivitiesModule.java
index b51a939..bd8d1e2 100644
--- a/app/src/main/java/me/gilo/wc/di/ActivitiesModule.java
+++ b/app/src/main/java/me/gilo/wc/di/ActivitiesModule.java
@@ -11,6 +11,7 @@ import me.gilo.wc.ui.customer.BillingAddressActivity;
import me.gilo.wc.ui.customer.ProfileActivity;
import me.gilo.wc.ui.customer.ShippingAddressActivity;
import me.gilo.wc.ui.home.HomeActivity;
+import me.gilo.wc.ui.product.CartActivity;
import me.gilo.wc.ui.product.ProductActivity;
import me.gilo.wc.ui.product.ShopActivity;
@@ -44,6 +45,9 @@ abstract class ActivitiesModule {
@ContributesAndroidInjector
abstract ShippingAddressActivity contributesShippingAddressActivity();
+ @ContributesAndroidInjector
+ abstract CartActivity contributesCartActivity();
+
@ContributesAndroidInjector
abstract ProfileActivity contributesProfileActivity();
diff --git a/app/src/main/java/me/gilo/wc/di/ViewModelModule.java b/app/src/main/java/me/gilo/wc/di/ViewModelModule.java
index d3a36fa..3b8157e 100644
--- a/app/src/main/java/me/gilo/wc/di/ViewModelModule.java
+++ b/app/src/main/java/me/gilo/wc/di/ViewModelModule.java
@@ -39,6 +39,12 @@ public abstract class ViewModelModule {
@ViewModelKey(CustomerViewModel.class)
abstract ViewModel bindCustomerViewModel(CustomerViewModel viewModel);
+ @Binds
+ @IntoMap
+ @ViewModelKey(CartViewModel.class)
+ abstract ViewModel bindCartViewModel(CartViewModel viewModel);
+
+
@Binds
@IntoMap
diff --git a/app/src/main/java/me/gilo/wc/models/CartLineItem.java b/app/src/main/java/me/gilo/wc/models/CartLineItem.java
index 352549b..e75f8b0 100644
--- a/app/src/main/java/me/gilo/wc/models/CartLineItem.java
+++ b/app/src/main/java/me/gilo/wc/models/CartLineItem.java
@@ -13,6 +13,10 @@ public class CartLineItem extends Model{
public int quantity;
public int productId;
+ String name;
+ String imageUrl;
+ String priceString;
+
public float getPrice() {
return price;
}
@@ -36,4 +40,28 @@ public class CartLineItem extends Model{
public void setProductId(int productId) {
this.productId = productId;
}
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getImageUrl() {
+ return imageUrl;
+ }
+
+ public void setImageUrl(String imageUrl) {
+ this.imageUrl = imageUrl;
+ }
+
+ public String getPriceString() {
+ return priceString;
+ }
+
+ public void setPriceString(String priceString) {
+ this.priceString = priceString;
+ }
}
diff --git a/app/src/main/java/me/gilo/wc/ui/product/CartActivity.kt b/app/src/main/java/me/gilo/wc/ui/product/CartActivity.kt
new file mode 100644
index 0000000..6cc5be2
--- /dev/null
+++ b/app/src/main/java/me/gilo/wc/ui/product/CartActivity.kt
@@ -0,0 +1,68 @@
+package me.gilo.wc.ui.product
+
+import android.content.Context
+import android.os.Bundle
+import io.github.inflationx.viewpump.ViewPumpContextWrapper
+import kotlinx.android.synthetic.main.activity_cart.*
+import me.gilo.wc.R
+import me.gilo.wc.common.Status
+import me.gilo.wc.models.CartLineItem
+import me.gilo.wc.ui.WooDroidActivity
+import me.gilo.wc.viewmodels.CartViewModel
+
+class CartActivity : WooDroidActivity() {
+
+
+ override lateinit var viewModel : CartViewModel
+ var cartItems : ArrayList = ArrayList()
+
+ override fun attachBaseContext(newBase: Context) {
+ super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_cart)
+
+ setSupportActionBar(toolbar)
+
+ viewModel = getViewModel(CartViewModel::class.java)
+ title = "Cart"
+
+ cart()
+
+ }
+
+ private fun cart() {
+ viewModel.cart().observe(this, android.arch.lifecycle.Observer { response ->
+ when (response!!.status()) {
+ Status.LOADING -> {
+
+ }
+
+ Status.SUCCESS -> {
+ cartItems.clear()
+
+ for (cartItem in response.data()){
+ cartItems.add(cartItem)
+
+ }
+ }
+
+ Status.ERROR -> {
+
+ }
+
+ Status.EMPTY -> {
+
+ }
+ }
+
+ })
+
+ }
+
+
+
+
+}
diff --git a/app/src/main/java/me/gilo/wc/ui/product/ProductActivity.kt b/app/src/main/java/me/gilo/wc/ui/product/ProductActivity.kt
index 7bcab28..c52f280 100644
--- a/app/src/main/java/me/gilo/wc/ui/product/ProductActivity.kt
+++ b/app/src/main/java/me/gilo/wc/ui/product/ProductActivity.kt
@@ -1,9 +1,9 @@
package me.gilo.wc.ui.product
+import android.content.Intent
import android.content.res.ColorStateList
import android.os.Bundle
import android.support.v4.content.ContextCompat
-import android.support.v4.view.GravityCompat
import android.text.Html
import android.view.Menu
import android.view.MenuItem
@@ -23,7 +23,6 @@ import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.woodroid.models.Product
import org.greenrobot.eventbus.EventBus
-import java.security.AccessController.getContext
class ProductActivity : BaseActivity() {
@@ -263,26 +262,24 @@ class ProductActivity : BaseActivity() {
var tvCartCounter : TextView? = null
override fun onCreateOptionsMenu(menu: Menu): Boolean {
- menuInflater.inflate(me.gilo.wc.R.menu.home, menu)
+ menuInflater.inflate(me.gilo.wc.R.menu.product, menu)
val item = menu.findItem(me.gilo.wc.R.id.menu_cart)
val rootView = item.actionView as FrameLayout
tvCartCounter = rootView.findViewById(me.gilo.wc.R.id.tvCart_counter)
+ rootView.setOnClickListener{startActivity(Intent(baseContext, CartActivity::class.java))}
+
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
- me.gilo.wc.R.id.action_filter -> {
+ R.id.menu_cart -> {
true
}
- me.gilo.wc.R.id.action_search -> {
-
- true
- }
else -> super.onOptionsItemSelected(item)
}
}
diff --git a/app/src/main/java/me/gilo/wc/viewmodels/CartViewModel.java b/app/src/main/java/me/gilo/wc/viewmodels/CartViewModel.java
new file mode 100644
index 0000000..3ed8491
--- /dev/null
+++ b/app/src/main/java/me/gilo/wc/viewmodels/CartViewModel.java
@@ -0,0 +1,56 @@
+package me.gilo.wc.viewmodels;
+
+import android.arch.lifecycle.ViewModel;
+import android.content.Context;
+import com.google.firebase.firestore.DocumentReference;
+import me.gilo.wc.common.CompletionGenericLiveData;
+import me.gilo.wc.common.QueryLiveData;
+import me.gilo.wc.common.WooLiveData;
+import me.gilo.wc.models.CartLineItem;
+import me.gilo.wc.repo.CartRepository;
+import me.gilo.wc.repo.OrderRepository;
+import me.gilo.wc.repo.ProductRepository;
+import me.gilo.woodroid.models.LineItem;
+import me.gilo.woodroid.models.Product;
+import me.gilo.woodroid.models.ProductReview;
+import me.gilo.woodroid.models.filters.ProductFilter;
+
+import javax.inject.Inject;
+import java.util.List;
+import java.util.Map;
+
+
+public final class CartViewModel extends ViewModel {
+
+ private final CartRepository cartRepository;
+
+ @Inject
+ CartViewModel(CartRepository cartRepository) {
+ this.cartRepository = cartRepository;
+ }
+
+ public CompletionGenericLiveData addToCart(int productId, float price) {
+ return cartRepository.addToCart(productId, price);
+ }
+
+ public QueryLiveData cart() {
+ return cartRepository.cart();
+ }
+
+ public CompletionGenericLiveData deleteItem(CartLineItem cartLineItem) {
+ return cartRepository.deleteItem(cartLineItem);
+ }
+
+ public CompletionGenericLiveData deleteAllCartItems() {
+ return cartRepository.deleteItems();
+ }
+
+ public CompletionGenericLiveData setQuantity(CartLineItem cartLineItem, int quantity) {
+ return cartRepository.setQuantity(cartLineItem, quantity);
+ }
+
+ public WooLiveData