diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 1bec35e..d99bd94 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,8 +1,18 @@ + + + + + + diff --git a/README.md b/README.md index cf8062d..f669a58 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,10 @@ Step 1. Add the JitPack repository to your build file ```xml - - jitpack.io - https://jitpack.io - + + jitpack.io + https://jitpack.io + ``` @@ -35,10 +35,10 @@ Step 1. Add the JitPack repository to your build file ```gradle allprojects { - repositories { - ... - maven { url 'https://jitpack.io' } - } + repositories { + ... + maven { url 'https://jitpack.io' } + } } ``` diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8b04cc3..991aaf8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,61 +2,64 @@ - + - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/app/src/main/java/me/gilo/wc/adapter/viewholder/ProductViewHolder.kt b/app/src/main/java/me/gilo/wc/adapter/viewholder/ProductViewHolder.kt index d7e6121..5bf2320 100644 --- a/app/src/main/java/me/gilo/wc/adapter/viewholder/ProductViewHolder.kt +++ b/app/src/main/java/me/gilo/wc/adapter/viewholder/ProductViewHolder.kt @@ -1,14 +1,23 @@ 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.wc.R 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.ui.coupon.CouponActivity +import me.gilo.wc.ui.product.ProductActivity + class ProductViewHolder(val context: Context, itemView: View) : RecyclerView.ViewHolder(itemView) { @@ -18,14 +27,35 @@ class ProductViewHolder(val context: Context, itemView: View) : val tvTitle = itemView.findViewById(R.id.tvTitle) val tvDescription = itemView.findViewById(R.id.tvDescription) val tvCallToAction = itemView.findViewById(R.id.tvCallToAction) + val tvOnSale = itemView.findViewById(R.id.tvOnSale) tvTitle.text = product.name tvDescription.text = Html.fromHtml(product.description) - tvCallToAction.text = Html.fromHtml(product.price_html) if (product.images != null && product.images.isNotEmpty()){ Picasso.with(context).load(product.images[0].src).into(ivImage) } + + val regularPrice = product.regular_price + val salePrice = product.sale_price + + val price = SpannableString("$$regularPrice $$salePrice") + if (product.isOn_sale) { + tvCallToAction.text = Html.fromHtml(product.price_html) + + tvOnSale.visibility = View.VISIBLE + }else{ + tvCallToAction.text = Html.fromHtml(product.price_html) + tvOnSale.visibility = View.GONE + } + + itemView.setOnClickListener{ + val intent = Intent(context, ProductActivity::class.java) + intent.putExtra("productId", product.id) + + context.startActivity(intent) + } + } diff --git a/app/src/main/java/me/gilo/wc/common/BaseActivity.java b/app/src/main/java/me/gilo/wc/common/BaseActivity.java index ee21ddf..33e9434 100644 --- a/app/src/main/java/me/gilo/wc/common/BaseActivity.java +++ b/app/src/main/java/me/gilo/wc/common/BaseActivity.java @@ -4,7 +4,10 @@ import android.annotation.SuppressLint; import android.arch.lifecycle.ViewModel; import android.arch.lifecycle.ViewModelProvider; import android.arch.lifecycle.ViewModelProviders; +import android.content.Context; import dagger.android.support.DaggerAppCompatActivity; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; +import me.gilo.wc.ui.state.ProgressDialogFragment; import javax.inject.Inject; @@ -22,4 +25,9 @@ public class BaseActivity extends DaggerAppCompatActivity { public T getViewModel(final Class cls) { return ViewModelProviders.of(this, viewModelFactory).get(cls); } + + + public void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } } 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 fbafee2..2f130e6 100644 --- a/app/src/main/java/me/gilo/wc/di/ActivitiesModule.java +++ b/app/src/main/java/me/gilo/wc/di/ActivitiesModule.java @@ -3,6 +3,7 @@ package me.gilo.wc.di; import dagger.Module; import dagger.android.ContributesAndroidInjector; import me.gilo.wc.MainActivity; +import me.gilo.wc.ui.product.ProductActivity; import me.gilo.wc.ui.product.ShopActivity; @Module @@ -14,4 +15,7 @@ abstract class ActivitiesModule { @ContributesAndroidInjector abstract ShopActivity contributesShopActivity(); + @ContributesAndroidInjector + abstract ProductActivity contributesProductActivity(); + } diff --git a/app/src/main/java/me/gilo/wc/repo/ProductRepository.java b/app/src/main/java/me/gilo/wc/repo/ProductRepository.java index 353ed2a..6ec74fb 100644 --- a/app/src/main/java/me/gilo/wc/repo/ProductRepository.java +++ b/app/src/main/java/me/gilo/wc/repo/ProductRepository.java @@ -22,6 +22,14 @@ public class ProductRepository extends WoocommerceRepository { } + public WooLiveData product(int productId) { + final WooLiveData callBack = new WooLiveData(); + + woocommerce.ProductRepository().product(productId).enqueue(callBack); + return callBack; + } + + public WooLiveData> search(String term) { final WooLiveData> callBack = new WooLiveData(); 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 new file mode 100644 index 0000000..3295ee1 --- /dev/null +++ b/app/src/main/java/me/gilo/wc/ui/product/ProductActivity.kt @@ -0,0 +1,107 @@ +package me.gilo.wc.ui.product + +import android.os.Bundle +import android.support.design.widget.Snackbar +import android.support.v7.app.AppCompatActivity; +import android.text.Html +import android.text.Spannable +import android.text.SpannableString +import android.text.style.ForegroundColorSpan +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import com.squareup.picasso.Picasso +import me.gilo.wc.R + +import kotlinx.android.synthetic.main.activity_product.* +import kotlinx.android.synthetic.main.content_product.* +import me.gilo.wc.common.BaseActivity +import me.gilo.wc.common.Status +import me.gilo.wc.ui.state.ProgressDialogFragment +import me.gilo.wc.viewmodels.ProductViewModel +import me.gilo.woodroid.models.Product + +class ProductActivity : BaseActivity() { + + lateinit var viewModel: ProductViewModel + val TAG = this::getLocalClassName + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_product) + setSupportActionBar(toolbar) + + viewModel = getViewModel(ProductViewModel::class.java) + + title = "Product" + + val productId = intent.getIntExtra("productId", 0) + + if (productId != 0){ + product(productId) + } + + } + + private fun product(productId : Int) { + viewModel.product(productId).observe(this, android.arch.lifecycle.Observer { response -> + when (response!!.status()) { + Status.LOADING -> { + + } + + Status.SUCCESS -> { + val product = response.data() + setUpPage(product) + + } + + Status.ERROR -> { + + } + + Status.EMPTY -> { + + } + } + + }) + + } + + private fun setUpPage(product: Product) { + tvTitle.text = product.name + tvDescription.text = Html.fromHtml(product.description) + + if (product.images != null && product.images.isNotEmpty()){ + Picasso.with(baseContext).load(product.images[0].src).into(ivImage) + } + + if (product.isOn_sale) { + tvCallToAction.text = Html.fromHtml(product.price_html) + + tvOnSale.visibility = View.VISIBLE + }else{ + tvCallToAction.text = Html.fromHtml(product.price_html) + tvOnSale.visibility = View.GONE + } + } + + private lateinit var progressDialog: ProgressDialogFragment + + fun showLoading(title: String, message: String) { + val manager = supportFragmentManager + progressDialog = ProgressDialogFragment.newInstance(title, message) + progressDialog.isCancelable = false + progressDialog.show(manager, "progress") + } + + fun showLoading() { + showLoading("This will only take a sec", "Loading") + } + + fun stopShowingLoading() { + progressDialog.dismiss() + } + +} diff --git a/app/src/main/java/me/gilo/wc/viewmodels/ProductViewModel.java b/app/src/main/java/me/gilo/wc/viewmodels/ProductViewModel.java index 1df5280..2fc2ba3 100644 --- a/app/src/main/java/me/gilo/wc/viewmodels/ProductViewModel.java +++ b/app/src/main/java/me/gilo/wc/viewmodels/ProductViewModel.java @@ -21,6 +21,10 @@ public final class ProductViewModel extends ViewModel { return productRepository.products(); } + public WooLiveData product(int productId) { + return productRepository.product(productId); + } + public WooLiveData> search(String term) { return productRepository.search(term); } diff --git a/app/src/main/res/layout/activity_product.xml b/app/src/main/res/layout/activity_product.xml new file mode 100644 index 0000000..55cbb7d --- /dev/null +++ b/app/src/main/res/layout/activity_product.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_product.xml b/app/src/main/res/layout/content_product.xml new file mode 100644 index 0000000..09b7d0f --- /dev/null +++ b/app/src/main/res/layout/content_product.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/single_product_item.xml b/app/src/main/res/layout/single_product_item.xml index 9c85f93..9e92b31 100644 --- a/app/src/main/res/layout/single_product_item.xml +++ b/app/src/main/res/layout/single_product_item.xml @@ -1,62 +1,80 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:background="@drawable/rect_white" + android:elevation="2dp" + android:orientation="vertical" + tools:ignore="MissingPrefix"> - + - + - + - + + + + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 59a0b0c..184ee9b 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,3 +1,3 @@ - 16dp + 16dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f46e41b..ee859ae 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,17 +1,18 @@ - wc-app - ShopActivity - CouponActivity - MenuActivity + wc-app + ShopActivity + CouponActivity + MenuActivity - fonts/GT-America-Bold.otf - fonts/GT-America-Medium.otf - fonts/GT-America-Regular.otf - AddCouponActivity - CouponsActivity - search - Search product - ProductSearchActivity + fonts/GT-America-Bold.otf + fonts/GT-America-Medium.otf + fonts/GT-America-Regular.otf + AddCouponActivity + CouponsActivity + search + Search product + ProductSearchActivity + ProductActivity diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 177cefc..e38303a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,20 +1,20 @@ - - + + - + -