Added cart counter and add and remove from cart logic tied to counter
This commit is contained in:
parent
d7be6e4831
commit
6d3ee7f2c7
@ -9,19 +9,10 @@ import java.util.List;
|
|||||||
|
|
||||||
public class CartLineItem extends Model{
|
public class CartLineItem extends Model{
|
||||||
|
|
||||||
String id;
|
|
||||||
public float price;
|
public float price;
|
||||||
public int quantity;
|
public int quantity;
|
||||||
public int productId;
|
public int productId;
|
||||||
|
|
||||||
public String getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(String id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public float getPrice() {
|
public float getPrice() {
|
||||||
return price;
|
return price;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,36 +1,44 @@
|
|||||||
package me.gilo.wc.ui.product
|
package me.gilo.wc.ui.product
|
||||||
|
|
||||||
|
import android.content.res.ColorStateList
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v7.widget.LinearLayoutManager
|
import android.support.v4.content.ContextCompat
|
||||||
|
import android.support.v4.view.GravityCompat
|
||||||
import android.text.Html
|
import android.text.Html
|
||||||
import android.util.Log
|
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.FrameLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
import kotlinx.android.synthetic.main.activity_product.*
|
import kotlinx.android.synthetic.main.activity_product.*
|
||||||
import kotlinx.android.synthetic.main.content_product.*
|
import kotlinx.android.synthetic.main.content_product.*
|
||||||
import kotlinx.android.synthetic.main.section_product_reviews.*
|
|
||||||
import me.gilo.wc.R
|
import me.gilo.wc.R
|
||||||
import me.gilo.wc.adapter.HomeProductAdapter
|
|
||||||
import me.gilo.wc.adapter.ImagePagerAdapter
|
import me.gilo.wc.adapter.ImagePagerAdapter
|
||||||
import me.gilo.wc.adapter.ProductReviewAdapter
|
|
||||||
import me.gilo.wc.common.BaseActivity
|
import me.gilo.wc.common.BaseActivity
|
||||||
import me.gilo.wc.common.Status
|
import me.gilo.wc.common.Status
|
||||||
import me.gilo.wc.events.ProductEvent
|
import me.gilo.wc.events.ProductEvent
|
||||||
|
import me.gilo.wc.models.CartLineItem
|
||||||
import me.gilo.wc.ui.state.ProgressDialogFragment
|
import me.gilo.wc.ui.state.ProgressDialogFragment
|
||||||
import me.gilo.wc.viewmodels.ProductViewModel
|
import me.gilo.wc.viewmodels.ProductViewModel
|
||||||
import me.gilo.woodroid.models.Product
|
import me.gilo.woodroid.models.Product
|
||||||
import me.gilo.woodroid.models.ProductReview
|
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import java.util.*
|
import java.security.AccessController.getContext
|
||||||
|
|
||||||
|
|
||||||
class ProductActivity : BaseActivity() {
|
class ProductActivity : BaseActivity() {
|
||||||
|
|
||||||
|
var productInCart = false;
|
||||||
|
lateinit var currentCartItem : CartLineItem
|
||||||
|
|
||||||
lateinit var viewModel: ProductViewModel
|
lateinit var viewModel: ProductViewModel
|
||||||
val TAG = this::getLocalClassName.toString()
|
val TAG = this::getLocalClassName.toString()
|
||||||
|
|
||||||
var related_ids : IntArray = intArrayOf()
|
var related_ids : IntArray = intArrayOf()
|
||||||
|
|
||||||
|
var cartItems : ArrayList<CartLineItem> = ArrayList()
|
||||||
|
var productId = 0
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_product)
|
setContentView(R.layout.activity_product)
|
||||||
@ -40,12 +48,14 @@ class ProductActivity : BaseActivity() {
|
|||||||
|
|
||||||
title = "Product"
|
title = "Product"
|
||||||
|
|
||||||
val productId = intent.getIntExtra("productId", 0)
|
productId = intent.getIntExtra("productId", 0)
|
||||||
|
|
||||||
if (productId != 0){
|
if (productId != 0){
|
||||||
product(productId)
|
product(productId)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cart()
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -75,6 +85,31 @@ class ProductActivity : BaseActivity() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun removeFromCart(cartLineItem: CartLineItem) {
|
||||||
|
|
||||||
|
viewModel.deleteItem(cartLineItem).observe(this, android.arch.lifecycle.Observer { response ->
|
||||||
|
when (response!!.status()) {
|
||||||
|
Status.LOADING -> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Status.SUCCESS -> {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Status.ERROR -> {
|
||||||
|
toast("error : " + response.error().message)
|
||||||
|
}
|
||||||
|
|
||||||
|
Status.EMPTY -> {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun product(productId : Int) {
|
private fun product(productId : Int) {
|
||||||
viewModel.product(productId).observe(this, android.arch.lifecycle.Observer { response ->
|
viewModel.product(productId).observe(this, android.arch.lifecycle.Observer { response ->
|
||||||
@ -88,7 +123,7 @@ class ProductActivity : BaseActivity() {
|
|||||||
setUpPage(product)
|
setUpPage(product)
|
||||||
//similarProducts(product)
|
//similarProducts(product)
|
||||||
|
|
||||||
fab.setOnClickListener{addToCart(productId, product.price.toFloat())}
|
|
||||||
|
|
||||||
EventBus.getDefault().post(ProductEvent(product))
|
EventBus.getDefault().post(ProductEvent(product))
|
||||||
|
|
||||||
@ -108,6 +143,73 @@ class ProductActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun cart() {
|
||||||
|
viewModel.cart().observe(this, android.arch.lifecycle.Observer { response ->
|
||||||
|
when (response!!.status()) {
|
||||||
|
Status.LOADING -> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Status.SUCCESS -> {
|
||||||
|
cartItems.clear()
|
||||||
|
productInCart = false
|
||||||
|
|
||||||
|
for (cartItem in response.data()){
|
||||||
|
cartItems.add(cartItem)
|
||||||
|
|
||||||
|
if(cartItem.productId == productId){
|
||||||
|
productInCart = true
|
||||||
|
currentCartItem = cartItem
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleFab()
|
||||||
|
|
||||||
|
if (cartItems.size == 0 && tvCartCounter != null){
|
||||||
|
tvCartCounter?.visibility = View.GONE
|
||||||
|
}else{
|
||||||
|
tvCartCounter?.visibility = View.VISIBLE
|
||||||
|
tvCartCounter?.text = cartItems.size.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Status.ERROR -> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Status.EMPTY -> {
|
||||||
|
productInCart = false
|
||||||
|
cartItems.clear()
|
||||||
|
toggleFab()
|
||||||
|
|
||||||
|
if (cartItems.size == 0 && tvCartCounter != null){
|
||||||
|
tvCartCounter?.visibility = View.GONE
|
||||||
|
}else{
|
||||||
|
tvCartCounter?.visibility = View.VISIBLE
|
||||||
|
tvCartCounter?.text = cartItems.size.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleFab() {
|
||||||
|
if (productInCart) {
|
||||||
|
fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.carnation_red))
|
||||||
|
fab.setImageDrawable(ContextCompat.getDrawable(baseContext, R.drawable.baseline_remove_shopping_cart_24))
|
||||||
|
}else{
|
||||||
|
fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorPrimary))
|
||||||
|
fab.setImageDrawable(ContextCompat.getDrawable(baseContext, R.drawable.baseline_add_shopping_cart_24))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun setUpPage(product: Product) {
|
private fun setUpPage(product: Product) {
|
||||||
tvTitle.text = product.name
|
tvTitle.text = product.name
|
||||||
tvDescription.text = Html.fromHtml(product.description)
|
tvDescription.text = Html.fromHtml(product.description)
|
||||||
@ -127,6 +229,18 @@ class ProductActivity : BaseActivity() {
|
|||||||
tvCallToAction.text = Html.fromHtml(product.price_html).trim()
|
tvCallToAction.text = Html.fromHtml(product.price_html).trim()
|
||||||
tvOnSale.visibility = View.GONE
|
tvOnSale.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fab.setOnClickListener{
|
||||||
|
if (productInCart){
|
||||||
|
removeFromCart(currentCartItem)
|
||||||
|
}else {
|
||||||
|
addToCart(productId, product.price.toFloat())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun toast(text : String){
|
||||||
|
Toast.makeText(baseContext, text, Toast.LENGTH_LONG).show()
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var progressDialog: ProgressDialogFragment
|
private lateinit var progressDialog: ProgressDialogFragment
|
||||||
@ -146,20 +260,26 @@ class ProductActivity : BaseActivity() {
|
|||||||
progressDialog.dismiss()
|
progressDialog.dismiss()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tvCartCounter : TextView? = null
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
menuInflater.inflate(R.menu.home, menu)
|
menuInflater.inflate(me.gilo.wc.R.menu.home, menu)
|
||||||
|
|
||||||
|
val item = menu.findItem(me.gilo.wc.R.id.menu_cart)
|
||||||
|
val rootView = item.actionView as FrameLayout
|
||||||
|
tvCartCounter = rootView.findViewById<TextView>(me.gilo.wc.R.id.tvCart_counter)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
return when (item.itemId) {
|
return when (item.itemId) {
|
||||||
R.id.action_filter -> {
|
me.gilo.wc.R.id.action_filter -> {
|
||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.action_search -> {
|
me.gilo.wc.R.id.action_search -> {
|
||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,4 +13,7 @@
|
|||||||
<color name="text_black_5">#5e6573</color>
|
<color name="text_black_5">#5e6573</color>
|
||||||
<color name="text_black_9">#949aa6</color>
|
<color name="text_black_9">#949aa6</color>
|
||||||
|
|
||||||
|
<color name="carnation_red">#fff35d55</color>
|
||||||
|
<color name="rose_pink">#f498bc</color>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user