From b6e5a32cd3c5c6580c118ef8f1a05d6596aa429d Mon Sep 17 00:00:00 2001 From: Gilbert Kimutai Date: Tue, 24 Mar 2020 16:10:30 +0300 Subject: [PATCH] icon change on add to cart --- .idea/compiler.xml | 13 +++++ .../app/ui/product/ProductActivity.kt | 51 +++++-------------- build.gradle | 2 +- .../java/me/gilo/woodroid/core/cart/Cart.kt | 4 +- .../me/gilo/woodroid/core/cart/CartItem.kt | 2 +- .../firebasecart/FirebaseCartRepository.kt | 7 +-- gradle/wrapper/gradle-wrapper.properties | 4 +- .../woodroid/offlinecart/dao/CartItemDao.kt | 6 +++ .../offlinecart/entity/CartItemEntity.kt | 2 +- .../offlinecart/repo/CartRepository.kt | 28 ++++++---- .../offlinecart/task/CartItemAsyncExecutor.kt | 25 +-------- 11 files changed, 61 insertions(+), 83 deletions(-) create mode 100644 .idea/compiler.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..41a4fba --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/me/gilo/woodroid/app/ui/product/ProductActivity.kt b/app/src/main/java/me/gilo/woodroid/app/ui/product/ProductActivity.kt index f1a6b27..d9bbc14 100644 --- a/app/src/main/java/me/gilo/woodroid/app/ui/product/ProductActivity.kt +++ b/app/src/main/java/me/gilo/woodroid/app/ui/product/ProductActivity.kt @@ -55,13 +55,25 @@ class ProductActivity : BaseActivity() { if (productId != 0){ product(productId) - + checkIfExistsInCart(productId) } cart() + } + private fun checkIfExistsInCart(productId: Int) { + RoomCartRepository(baseContext).exists(productId).observe(this, Observer {productExists -> + if (productExists) { + 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)) + } + productInCart = productExists + }) } @@ -79,27 +91,6 @@ class ProductActivity : BaseActivity() { private fun removeFromCart(cartLineItem: CartLineItem) { - viewModel.deleteItem(cartLineItem).observe(this, androidx.lifecycle.Observer { response -> - when (response!!.status()) { - Status.LOADING -> { - - } - - Status.SUCCESS -> { - - - } - - Status.ERROR -> { - toast("error : " + response.error().message) - } - - Status.EMPTY -> { - - } - } - - }) } @@ -135,7 +126,7 @@ class ProductActivity : BaseActivity() { private fun cart() { - viewModel.cart().observe(this, androidx.lifecycle.Observer { response -> + viewModel.cart().observe(this, Observer { response -> when (response!!.status()) { Status.LOADING -> { @@ -156,8 +147,6 @@ class ProductActivity : BaseActivity() { } } - toggleFab() - if (cartItems.size == 0 && tvCartCounter != null){ tvCartCounter?.visibility = View.GONE }else{ @@ -175,7 +164,6 @@ class ProductActivity : BaseActivity() { Status.EMPTY -> { productInCart = false cartItems.clear() - toggleFab() if (cartItems.size == 0 && tvCartCounter != null){ tvCartCounter?.visibility = View.GONE @@ -190,17 +178,6 @@ class ProductActivity : BaseActivity() { } - 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) { tvTitle.text = product.name tvDescription.text = Html.fromHtml(product.description) diff --git a/build.gradle b/build.gradle index 5009e01..9084ae8 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.0.0-alpha04' + classpath 'com.android.tools.build:gradle:4.1.0-alpha02' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.2.0' classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0' diff --git a/core/src/main/java/me/gilo/woodroid/core/cart/Cart.kt b/core/src/main/java/me/gilo/woodroid/core/cart/Cart.kt index 5e0cfda..a7279ed 100644 --- a/core/src/main/java/me/gilo/woodroid/core/cart/Cart.kt +++ b/core/src/main/java/me/gilo/woodroid/core/cart/Cart.kt @@ -1,6 +1,7 @@ package me.gilo.woodroid.core.cart +import androidx.lifecycle.LiveData import me.gilo.woodroid.core.cart.lines.FeeLine import me.gilo.woodroid.core.cart.lines.LineItem import me.gilo.woodroid.core.cart.lines.ShippingLine @@ -32,6 +33,7 @@ data class Cart( var feeLines: List = ArrayList(), - var couponLines: List = ArrayList() + var couponLines: List = ArrayList(), + var items: LiveData> ) diff --git a/core/src/main/java/me/gilo/woodroid/core/cart/CartItem.kt b/core/src/main/java/me/gilo/woodroid/core/cart/CartItem.kt index 2c61686..7d070c2 100644 --- a/core/src/main/java/me/gilo/woodroid/core/cart/CartItem.kt +++ b/core/src/main/java/me/gilo/woodroid/core/cart/CartItem.kt @@ -2,7 +2,7 @@ package me.gilo.woodroid.core.cart data class CartItem ( - var id: Int? = 0, + var id: Int? = null, var createdAt: Long? = null, var modifiedAt: Long? = null, var productId: Int = 0, diff --git a/firebasecart/src/main/java/me/gilo/woodroid/firebasecart/FirebaseCartRepository.kt b/firebasecart/src/main/java/me/gilo/woodroid/firebasecart/FirebaseCartRepository.kt index cfc7b30..eab7f08 100644 --- a/firebasecart/src/main/java/me/gilo/woodroid/firebasecart/FirebaseCartRepository.kt +++ b/firebasecart/src/main/java/me/gilo/woodroid/firebasecart/FirebaseCartRepository.kt @@ -1,14 +1,9 @@ package me.gilo.woodroid.firebasecart -import androidx.lifecycle.LiveData -import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.CollectionReference import com.google.firebase.firestore.FirebaseFirestore -import me.gilo.woodroid.core.cart.Cart -import me.gilo.woodroid.core.cart.CartItem -import me.gilo.woodroid.core.cart.CartRepository -import me.gilo.woodroid.core.cart.lines.LineItem + open class FirebaseCartRepository(userId : String){ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fc22f1c..71881c9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Nov 30 11:05:14 EAT 2019 +#Tue Mar 17 11:45:23 EAT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-rc-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.1-bin.zip diff --git a/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/dao/CartItemDao.kt b/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/dao/CartItemDao.kt index 164458a..e9b22d5 100755 --- a/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/dao/CartItemDao.kt +++ b/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/dao/CartItemDao.kt @@ -12,9 +12,15 @@ interface CartItemDao { @Query("SELECT * FROM cart_item ORDER BY created_at desc") fun fetchAll(): List + @Query("SELECT * FROM cart_item ORDER BY created_at desc") + fun items(): LiveData> + @Query("SELECT COUNT(*) FROM cart_item") fun count(): LiveData + @Query("SELECT COUNT(*) FROM cart_item where product_id = :productId") + fun exists(productId: Int): LiveData + @Query("SELECT * FROM cart_item WHERE id =:id") operator fun get(id: Int): LiveData diff --git a/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/entity/CartItemEntity.kt b/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/entity/CartItemEntity.kt index 8cca48e..6d59d9f 100644 --- a/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/entity/CartItemEntity.kt +++ b/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/entity/CartItemEntity.kt @@ -8,7 +8,7 @@ import me.gilo.woodroid.core.cart.CartItem @Entity(tableName = "cart_item") data class CartItemEntity ( @PrimaryKey(autoGenerate = true) - var id: Int? = 0, + var id: Int?, @ColumnInfo(name = "created_at") var createdAt: Long? = null, diff --git a/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/repo/CartRepository.kt b/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/repo/CartRepository.kt index 165fba7..8b08922 100755 --- a/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/repo/CartRepository.kt +++ b/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/repo/CartRepository.kt @@ -2,19 +2,18 @@ package me.gilo.woodroid.offlinecart.repo import android.content.Context import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations import androidx.room.Room -import me.gilo.moneta.room.task.DeleteCartItem -import me.gilo.moneta.room.task.InsertCartItem -import me.gilo.moneta.room.task.RetrieveCartItems -import me.gilo.moneta.room.task.UpdateCartItem -import me.gilo.woodroid.offlinecart.utils.AppUtils +import me.gilo.woodroid.offlinecart.task.DeleteCartItem +import me.gilo.woodroid.offlinecart.task.InsertCartItem +import me.gilo.woodroid.offlinecart.task.UpdateCartItem +import me.gilo.woodroid.core.cart.Cart import me.gilo.woodroid.core.cart.CartItem import me.gilo.woodroid.offlinecart.config.Config import me.gilo.woodroid.offlinecart.db.AppDatabase import me.gilo.woodroid.offlinecart.entity.CartItemEntity import me.gilo.woodroid.offlinecart.entity.toCartItem +import me.gilo.woodroid.offlinecart.utils.AppUtils class RoomCartRepository(val context: Context){ @@ -32,6 +31,8 @@ class RoomCartRepository(val context: Context){ InsertCartItem(appDatabase, cartItem).execute() } + + fun update(cartItem: CartItem) { cartItem.modifiedAt = AppUtils.currentDateTime.time UpdateCartItem(appDatabase, cartItem).execute() @@ -42,6 +43,10 @@ class RoomCartRepository(val context: Context){ return appDatabase.cartItemDao().count() } + fun exists(productId: Int): LiveData { + return appDatabase.cartItemDao().exists(productId) + } + fun delete(cartItem: CartItem) { DeleteCartItem(appDatabase, cartItem).execute() } @@ -53,11 +58,12 @@ class RoomCartRepository(val context: Context){ } } - fun items(): LiveData> { - val data: MutableLiveData> = MutableLiveData() - RetrieveCartItems(appDatabase, data).execute() - - return data + fun cart(): Cart { + return Cart( + items = Transformations.map(appDatabase.cartItemDao().items()){ + it.map { cartItemEntity -> cartItemEntity.toCartItem() } + } + ) } } diff --git a/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/task/CartItemAsyncExecutor.kt b/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/task/CartItemAsyncExecutor.kt index e0311fa..79da183 100644 --- a/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/task/CartItemAsyncExecutor.kt +++ b/offlinecart/src/main/java/me/gilo/woodroid/offlinecart/task/CartItemAsyncExecutor.kt @@ -1,7 +1,8 @@ -package me.gilo.moneta.room.task +package me.gilo.woodroid.offlinecart.task import android.os.AsyncTask import androidx.lifecycle.MutableLiveData +import me.gilo.woodroid.core.cart.Cart import me.gilo.woodroid.core.cart.CartItem import me.gilo.woodroid.offlinecart.db.AppDatabase import me.gilo.woodroid.offlinecart.entity.toCartItem @@ -23,28 +24,6 @@ class InsertCartItem( } } -class RetrieveCartItems( - private val appDatabase: AppDatabase, - - private val data: MutableLiveData> -) : - AsyncTask() { - - var categories = ArrayList() - - override fun doInBackground(vararg voids: Void){ - val list = appDatabase.cartItemDao().fetchAll() - for (item in list){ - categories.add(item.toCartItem()) - } - } - - override fun onPostExecute(result: Unit?) { - data.value = categories; - super.onPostExecute(result) - } -} - class UpdateCartItem( private val appDatabase: AppDatabase, private val cartItem: CartItem