Added filter draw on sample app

This commit is contained in:
Gilbert Kimutai 2019-02-23 07:39:19 +03:00
parent c3697b297f
commit c5322be2b3
90 changed files with 582 additions and 117 deletions

View File

@ -58,6 +58,7 @@ dependencies {
implementation 'com.squareup.picasso:picasso:2.5.2' implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'com.android.support:support-v4:28.0.0'
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

View File

@ -12,6 +12,11 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity
android:name=".ui.product.NavigatioDrawerActivity"
android:label="@string/title_activity_navigatio_drawer"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity <activity
android:name=".ui.product.ProductActivity" android:name=".ui.product.ProductActivity"
android:label="@string/title_activity_product" android:label="@string/title_activity_product"

View File

@ -5,6 +5,7 @@ import android.support.v7.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main.*
import me.gilo.wc.ui.MenuActivity import me.gilo.wc.ui.MenuActivity
import me.gilo.wc.ui.product.ShopActivity
import me.gilo.woodroid.Woocommerce import me.gilo.woodroid.Woocommerce
import me.gilo.woodroid.models.Coupon import me.gilo.woodroid.models.Coupon
import me.gilo.woodroid.models.Product import me.gilo.woodroid.models.Product
@ -21,36 +22,8 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
startActivity(Intent(baseContext, MenuActivity::class.java)); startActivity(Intent(baseContext, ShopActivity::class.java));
finish() finish()
} }
// private fun coupons() {
// val woocommerce = Woocommerce.Builder()
// .setSiteUrl("http://157.230.131.179")
// .setApiVersion("2")
// .setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
// .setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
// .build()
//
// tvText.append("\n")
// tvText.append("\n")
// tvText.append("Products")
// tvText.append("\n")
// tvText.append("\n")
//
// woocommerce.Coupon().coupons().enqueue(object : Callback<List<Coupon>> {
// override fun onResponse(call: Call<List<Coupon>>, response: Response<List<Coupon>>) {
// val coupons = response.body()
// for (coupon in coupons!!) {
// tvText.append(coupon.description + "\n")
// }
// }
//
// override fun onFailure(call: Call<List<Coupon>>, t: Throwable) {
//
// }
// })
// }
} }

View File

@ -0,0 +1,26 @@
package me.gilo.wc.repo;
import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.models.Order;
import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.filters.ProductFilter;
import javax.inject.Inject;
import java.util.List;
public class OrderRepository extends WoocommerceRepository {
@Inject
public OrderRepository() {
}
public WooLiveData<Order> addToCart(int productId) {
final WooLiveData<Order> callBack = new WooLiveData();
woocommerce.OrderRepository().addToCart(productId).enqueue(callBack);
return callBack;
}
}

View File

@ -3,6 +3,7 @@ package me.gilo.wc.repo;
import me.gilo.wc.common.WooLiveData; import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.models.Product; import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.filters.ProductFilter;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.List; import java.util.List;
@ -21,6 +22,13 @@ public class ProductRepository extends WoocommerceRepository {
return callBack; return callBack;
} }
public WooLiveData<List<Product>> products(ProductFilter productFilter) {
final WooLiveData<List<Product>> callBack = new WooLiveData();
woocommerce.ProductRepository().products(productFilter).enqueue(callBack);
return callBack;
}
public WooLiveData<Product> product(int productId) { public WooLiveData<Product> product(int productId) {
final WooLiveData<Product> callBack = new WooLiveData(); final WooLiveData<Product> callBack = new WooLiveData();

View File

@ -41,6 +41,33 @@ class ProductActivity : BaseActivity() {
product(productId) product(productId)
} }
fab.setOnClickListener{addToCart(productId)}
}
private fun addToCart(productId: Int) {
viewModel.addToCart(productId).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
}
Status.SUCCESS -> {
val order = response.data()
}
Status.ERROR -> {
}
Status.EMPTY -> {
}
}
})
} }
private fun product(productId : Int) { private fun product(productId : Int) {

View File

@ -5,10 +5,13 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.design.widget.Snackbar import android.support.design.widget.Snackbar
import android.support.v4.view.GravityCompat
import android.support.v7.app.ActionBarDrawerToggle
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.SearchView import android.support.v7.widget.SearchView
import android.view.Menu import android.view.Menu
import android.view.MenuItem
import android.widget.Toast import android.widget.Toast
import io.github.inflationx.viewpump.ViewPumpContextWrapper import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.wc.R import me.gilo.wc.R
@ -24,10 +27,14 @@ import me.gilo.woodroid.models.Product
import org.json.JSONObject import org.json.JSONObject
import java.util.ArrayList import java.util.ArrayList
class ProductSearchActivity : BaseActivity() { class ProductSearchActivity : BaseActivity() {
lateinit var adapter: ProductAdapter lateinit var adapter: ProductAdapter
lateinit var products: ArrayList<Product> lateinit var products: ArrayList<Product>
lateinit var toggle: ActionBarDrawerToggle
lateinit var viewModel: ProductViewModel lateinit var viewModel: ProductViewModel
val TAG = this::getLocalClassName val TAG = this::getLocalClassName
@ -55,6 +62,7 @@ class ProductSearchActivity : BaseActivity() {
rvShop.adapter = adapter rvShop.adapter = adapter
handleIntent(intent) handleIntent(intent)
} }
override fun onNewIntent(intent: Intent) { override fun onNewIntent(intent: Intent) {
@ -110,6 +118,8 @@ class ProductSearchActivity : BaseActivity() {
}) })
} }
private lateinit var progressDialog: ProgressDialogFragment private lateinit var progressDialog: ProgressDialogFragment

View File

@ -2,13 +2,16 @@ package me.gilo.wc.ui.product
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.view.GravityCompat
import android.support.v7.widget.GridLayoutManager import android.support.v7.widget.GridLayoutManager
import android.view.Menu import android.view.Menu
import android.view.MenuItem
import android.widget.Filter
import android.widget.Toast import android.widget.Toast
import com.miguelcatalan.materialsearchview.MaterialSearchView
import io.github.inflationx.viewpump.ViewPumpContextWrapper import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_shop.* import kotlinx.android.synthetic.main.activity_shop.*
import kotlinx.android.synthetic.main.content_shop.* import kotlinx.android.synthetic.main.content_shop.*
import kotlinx.android.synthetic.main.drawer_filter.*
import me.gilo.wc.R import me.gilo.wc.R
import me.gilo.wc.adapter.ProductAdapter import me.gilo.wc.adapter.ProductAdapter
import me.gilo.wc.common.BaseActivity import me.gilo.wc.common.BaseActivity
@ -16,18 +19,16 @@ import me.gilo.wc.common.Status
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 org.json.JSONObject import me.gilo.woodroid.models.filters.ProductFilter
import java.util.* import java.util.*
import android.text.Editable
import android.text.TextWatcher
class ShopActivity : BaseActivity() { class ShopActivity : BaseActivity() {
lateinit var adapter: ProductAdapter lateinit var adapter: ProductAdapter
lateinit var products: ArrayList<Product> private lateinit var products: ArrayList<Product>
lateinit var viewModel: ProductViewModel private lateinit var viewModel: ProductViewModel
val TAG = this::getLocalClassName val TAG = this::getLocalClassName
override fun attachBaseContext(newBase: Context) { override fun attachBaseContext(newBase: Context) {
@ -54,18 +55,65 @@ class ShopActivity : BaseActivity() {
products() products()
etSearch.addTextChangedListener(object : TextWatcher { bFilter.setOnClickListener{filter()}
}
override fun afterTextChanged(s: Editable) {} private fun filter() {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} val filter = ProductFilter()
if (etSearch.text.toString().isNotEmpty()){
filter.search = etSearch.text.toString()
}
if (etMinPrice.text.toString().isNotEmpty()){
filter.min_price = etMinPrice.text.toString()
}
if (etMaxPrice.text.toString().isNotEmpty()){
filter.max_price = etMaxPrice.text.toString()
}
if (cbFeatured.isChecked){
filter.isFeatured = true
}
if (cbOnSale.isChecked){
filter.isOn_sale = true
}
toggleDrawer()
products(filter)
}
private fun products(filter: ProductFilter) {
viewModel.products(filter).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
}
Status.SUCCESS -> {
products.clear()
val productsResponse = response.data()
for (product in productsResponse) {
products.add(product)
}
adapter.notifyDataSetChanged()
}
Status.ERROR -> {
}
Status.EMPTY -> {
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
if (s.isNotEmpty()) {
search(s.toString())
}else{
products()
} }
} }
}) })
} }
@ -138,6 +186,33 @@ class ShopActivity : BaseActivity() {
return true return true
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_filter -> {
toggleDrawer()
true
}
R.id.action_search -> {
toggleDrawer()
true
}
else -> super.onOptionsItemSelected(item)
}
}
private fun toast(text: String) {
Toast.makeText(baseContext, text, Toast.LENGTH_LONG).show()
}
private fun toggleDrawer() {
if (drawer_layout.isDrawerOpen(GravityCompat.END)) {
drawer_layout.closeDrawer(GravityCompat.END)
} else {
drawer_layout.openDrawer(GravityCompat.END)
}
}
private lateinit var progressDialog: ProgressDialogFragment private lateinit var progressDialog: ProgressDialogFragment
fun showLoading(title: String, message: String) { fun showLoading(title: String, message: String) {

View File

@ -2,8 +2,11 @@ package me.gilo.wc.viewmodels;
import android.arch.lifecycle.ViewModel; import android.arch.lifecycle.ViewModel;
import me.gilo.wc.common.WooLiveData; import me.gilo.wc.common.WooLiveData;
import me.gilo.wc.repo.OrderRepository;
import me.gilo.wc.repo.ProductRepository; import me.gilo.wc.repo.ProductRepository;
import me.gilo.woodroid.models.Order;
import me.gilo.woodroid.models.Product; import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.filters.ProductFilter;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.List; import java.util.List;
@ -11,16 +14,26 @@ import java.util.List;
public final class ProductViewModel extends ViewModel { public final class ProductViewModel extends ViewModel {
private final ProductRepository productRepository; private final ProductRepository productRepository;
private final OrderRepository orderRepository;
@Inject @Inject
ProductViewModel(ProductRepository productRepository) { ProductViewModel(ProductRepository productRepository, OrderRepository orderRepository) {
this.productRepository = productRepository; this.productRepository = productRepository;
this.orderRepository = orderRepository;
} }
public WooLiveData<List<Product>> products() { public WooLiveData<List<Product>> products() {
return productRepository.products(); return productRepository.products();
} }
public WooLiveData<Order> addToCart(int productId) {
return orderRepository.addToCart(productId);
}
public WooLiveData<List<Product>> products(ProductFilter filter) {
return productRepository.products(filter);
}
public WooLiveData<Product> product(int productId) { public WooLiveData<Product> product(int productId) {
return productRepository.product(productId); return productRepository.product(productId);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
<path
android:fillColor="#FF000000"
android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M22,16V4c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zm-11,-4l2.03,2.71L16,11l4,5H8l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2H4V6H2z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6zm16,-4H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2zm-8,12.5v-9l6,4.5 -6,4.5z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 909 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 968 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 909 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#ffffff"
android:pathData="M11,9h2L13,6h3L16,4h-3L13,1h-2v3L8,4v2h3v3zM7,18c-1.1,0 -1.99,0.9 -1.99,2S5.9,22 7,22s2,-0.9 2,-2 -0.9,-2 -2,-2zM17,18c-1.1,0 -1.99,0.9 -1.99,2s0.89,2 1.99,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM7.17,14.75l0.03,-0.12 0.9,-1.63h7.45c0.75,0 1.41,-0.41 1.75,-1.03l3.86,-7.01L19.42,4h-0.01l-1.1,2 -2.76,5L8.53,11l-0.13,-0.27L6.16,6l-0.95,-2 -0.94,-2L1,2v2h2l3.6,7.59 -1.35,2.45c-0.16,0.28 -0.25,0.61 -0.25,0.96 0,1.1 0.9,2 2,2h12v-2L7.42,15c-0.13,0 -0.25,-0.11 -0.25,-0.25z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#ffffff"
android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
</vector>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<padding
android:bottom="8dp"
android:top="8dp"
/>
<corners
android:radius="2dp"
/>
<solid android:color="#fdfdfd"/>
<stroke android:color="@color/bg"
android:width="1dp"
/>
</shape>

View File

@ -0,0 +1,9 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="135"
android:centerColor="#009688"
android:endColor="#00695C"
android:startColor="#4DB6AC"
android:type="linear"/>
</shape>

View File

@ -29,6 +29,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|end" android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin" android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email"/> android:src="@drawable/baseline_add_shopping_cart_24"
android:tint="#ffffff"
/>
</android.support.design.widget.CoordinatorLayout> </android.support.design.widget.CoordinatorLayout>

View File

@ -1,66 +1,47 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout <android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:id="@+id/drawer_layout"
android:layout_height="match_parent" android:layout_width="match_parent"
tools:context=".ui.product.ShopActivity"> android:layout_height="match_parent"
tools:context=".ui.product.ShopActivity"
tools:openDrawer="end">
<android.support.design.widget.AppBarLayout <android.support.design.widget.CoordinatorLayout
android:layout_height="wrap_content" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="match_parent"
android:theme="@style/AppTheme.AppBarOverlay"> >
<android.support.v7.widget.Toolbar <android.support.design.widget.AppBarLayout
android:id="@+id/toolbar" android:layout_height="wrap_content"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:theme="@style/AppTheme.AppBarOverlay">
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"> <android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay">
</android.support.v7.widget.Toolbar> </android.support.v7.widget.Toolbar>
<FrameLayout </android.support.design.widget.AppBarLayout>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:elevation="2dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="8dp">
<android.support.v7.widget.AppCompatEditText <include layout="@layout/content_shop"/>
android:id="@+id/etSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:cursorVisible="true"
android:textColorHint="@color/text_black_9"
android:textColor="@color/text_black_2"
android:hint="Seatch"
android:background="@drawable/rect_white"
android:paddingLeft="12dp"
android:paddingTop="12dp"
android:paddingRight="12dp"
android:paddingBottom="12dp"
android:textSize="16sp"
app:backgroundTint="#ffffff"/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="16dp"
android:src="@drawable/baseline_search_white_18dp"
android:tint="@color/text_black_9"
android:layout_gravity="right|center"
/>
</FrameLayout> </android.support.design.widget.CoordinatorLayout>
</android.support.design.widget.AppBarLayout> <include
layout="@layout/drawer_filter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
<include layout="@layout/content_shop"/> />
</android.support.design.widget.CoordinatorLayout> </android.support.v4.widget.DrawerLayout>

View File

@ -24,6 +24,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/rect_white" android:background="@drawable/rect_white"
android:elevation="2dp" android:elevation="2dp"

View File

@ -0,0 +1,174 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg"
android:orientation="vertical"
>
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg"
android:orientation="vertical"
>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Search product"
android:layout_margin="16dp"
android:elevation="1dp"
android:id="@+id/etSearch"
android:background="@drawable/rect_white"
android:padding="16dp"
android:layout_marginBottom="16dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:background="@drawable/rect_white"
android:elevation="1dp"
android:padding="16dp"
android:orientation="vertical"
tools:ignore="MissingPrefix">
<TextView
fontPath="@string/font_regular"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sort"
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:layout_marginBottom="16dp"
tools:ignore="MissingPrefix"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/rect_grey_stroke"
>
<Spinner
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/sort"
android:id="@+id/sSort"
/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:background="@drawable/rect_white"
android:elevation="1dp"
android:padding="16dp"
android:orientation="vertical"
tools:ignore="MissingPrefix">
<TextView
fontPath="@string/font_regular"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Filter"
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:layout_marginBottom="16dp"
tools:ignore="MissingPrefix"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="16dp"
>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Min"
android:id="@+id/etMinPrice"
android:inputType="numberDecimal"
android:gravity="center"
android:layout_weight="1"
android:background="@drawable/rect_grey_stroke"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:textSize="24sp"
android:layout_margin="8dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Max"
android:id="@+id/etMaxPrice"
android:gravity="center"
android:inputType="numberDecimal"
android:layout_weight="1"
android:background="@drawable/rect_grey_stroke"
/>
</LinearLayout>
<android.support.v7.widget.AppCompatCheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="On Sale"
android:id="@+id/cbOnSale"
android:padding="4dp"
fontPath="@string/font_regular"
android:textSize="16sp"
android:textColor="@color/text_black_5"
/>
<android.support.v7.widget.AppCompatCheckBox
android:id="@+id/cbFeatured"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Featured"
android:padding="4dp"
fontPath="@string/font_regular"
android:textSize="16sp"
android:textColor="@color/text_black_5"
/>
</LinearLayout>
<Button
android:id="@+id/bFilter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Filter"
android:layout_margin="16dp"
android:textAllCaps="false"
android:textColor="#ffffff"
android:background="@color/colorAccent"
/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>

View File

@ -1,10 +1,30 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <menu xmlns:android="http://schemas.android.com/apk/res/android"
<item xmlns:app="http://schemas.android.com/apk/res-auto">
android:id="@+id/action_filter" <item
android:icon="@drawable/baseline_filter_list_24" android:id="@+id/action_filter"
android:orderInCategory="100" android:icon="@drawable/baseline_filter_list_24"
android:title="Filter" android:orderInCategory="100"
android:iconTint="#ffffff" android:title="Filter"
app:showAsAction="always"/> android:iconTint="#ffffff"
app:showAsAction="always"/>
<item
android:id="@+id/action_sort"
android:icon="@drawable/baseline_sort_by_alpha_24"
android:orderInCategory="100"
android:title="Sort"
android:iconTint="#ffffff"
app:showAsAction="always"/>
<item
android:id="@+id/action_search"
android:icon="@drawable/baseline_search_white_24"
android:orderInCategory="100"
android:title="Search"
android:iconTint="#ffffff"
app:showAsAction="always"/>
</menu> </menu>

View File

@ -1,3 +1,8 @@
<resources> <resources>
<dimen name="fab_margin">16dp</dimen> <dimen name="fab_margin">16dp</dimen>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="nav_header_vertical_spacing">8dp</dimen>
<dimen name="nav_header_height">176dp</dimen>
</resources> </resources>

View File

@ -0,0 +1,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<item name="ic_menu_camera" type="drawable">@android:drawable/ic_menu_camera</item>
<item name="ic_menu_gallery" type="drawable">@android:drawable/ic_menu_gallery</item>
<item name="ic_menu_slideshow" type="drawable">@android:drawable/ic_menu_slideshow</item>
<item name="ic_menu_manage" type="drawable">@android:drawable/ic_menu_manage</item>
<item name="ic_menu_share" type="drawable">@android:drawable/ic_menu_share</item>
<item name="ic_menu_send" type="drawable">@android:drawable/ic_menu_send</item>
</resources>

View File

@ -14,5 +14,19 @@
<string name="search_hint">Search product</string> <string name="search_hint">Search product</string>
<string name="title_activity_product_search">ProductSearchActivity</string> <string name="title_activity_product_search">ProductSearchActivity</string>
<string name="title_activity_product">ProductActivity</string> <string name="title_activity_product">ProductActivity</string>
<string name="title_activity_navigatio_drawer">NavigatioDrawerActivity</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
<string name="nav_header_title">Android Studio</string>
<string name="nav_header_subtitle">android.studio@android.com</string>
<string name="nav_header_desc">Navigation header</string>
<string name="action_settings">Settings</string>
<string-array name="sort">
<item>Popularity</item>
<item>Date added</item>
<item>Price lowest first</item>
<item>Price highest first</item>
</string-array>
</resources> </resources>

View File

@ -6,6 +6,9 @@
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> <item name="colorAccent">@color/colorAccent</item>
<item name="android:spinnerDropDownItemStyle">@style/SpinnerItemStyle</item>
<item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item>
</style> </style>
<style name="AppTheme.NoActionBar"> <style name="AppTheme.NoActionBar">
@ -17,4 +20,10 @@
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
<style name="SpinnerItemStyle" parent="@android:style/Widget.Holo.DropDownItem.Spinner">
<item name="android:textColor">@color/text_black_9</item>
<item name="android:textSize">16sp</item>
</style>
</resources> </resources>

View File

@ -7,8 +7,7 @@ import java.util.List;
public class LineItem { public class LineItem {
@SerializedName("product_id")
public int id;
public String subtotal; public String subtotal;
@SerializedName("subtotal_tax") @SerializedName("subtotal_tax")
public String subtotalTax; public String subtotalTax;
@ -18,7 +17,10 @@ public class LineItem {
public int quantity; public int quantity;
public Object taxClass; public Object taxClass;
public String name; public String name;
@SerializedName("product_id")
public int productId; public int productId;
public String sku; public String sku;
public String variations; public String variations;
public List<Metum> meta = new ArrayList<Metum>(); public List<Metum> meta = new ArrayList<Metum>();
@ -31,14 +33,6 @@ public class LineItem {
this.variations = variations; this.variations = variations;
} }
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSubtotal() { public String getSubtotal() {
return subtotal; return subtotal;
} }

View File

@ -261,6 +261,11 @@ public class Order {
this.lineItems = lineItems; this.lineItems = lineItems;
} }
public void addLineItem(LineItem lineItem) {
lineItems.add(lineItem);
}
public List<ShippingLine> getShippingLines() { public List<ShippingLine> getShippingLines() {
return shippingLines; return shippingLines;
} }

View File

@ -1,6 +1,7 @@
package me.gilo.woodroid.repo; package me.gilo.woodroid.repo;
import me.gilo.woodroid.data.api.OrderAPI; import me.gilo.woodroid.data.api.OrderAPI;
import me.gilo.woodroid.models.LineItem;
import me.gilo.woodroid.models.Order; import me.gilo.woodroid.models.Order;
import me.gilo.woodroid.models.OrderNote; import me.gilo.woodroid.models.OrderNote;
import me.gilo.woodroid.models.filters.OrderFilter; import me.gilo.woodroid.models.filters.OrderFilter;
@ -8,6 +9,8 @@ import me.gilo.woodroid.repo.order.OrderNoteRepository;
import me.gilo.woodroid.repo.order.RefundRepository; import me.gilo.woodroid.repo.order.RefundRepository;
import retrofit2.Call; import retrofit2.Call;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class OrderRepository extends WooRepository { public class OrderRepository extends WooRepository {
@ -29,6 +32,18 @@ public class OrderRepository extends WooRepository {
return apiService.create(order); return apiService.create(order);
} }
public Call<Order> addToCart(int productId) {
Order order = new Order();
LineItem lineItem = new LineItem();
lineItem.setProductId(productId);
lineItem.setQuantity(1);
order.addLineItem(lineItem);
return apiService.create(order);
}
public Call<Order> order(int id) { public Call<Order> order(int id) {
return apiService.view(id); return apiService.view(id);
} }