diff --git a/app/build.gradle b/app/build.gradle
index ccd18c8..23ad625 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -81,4 +81,8 @@ dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
+
+ implementation 'com.miguelcatalan:materialsearchview:1.4.0'
+
+
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ed925bf..8b04cc3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,48 +2,61 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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 f103cb9..353ed2a 100644
--- a/app/src/main/java/me/gilo/wc/repo/ProductRepository.java
+++ b/app/src/main/java/me/gilo/wc/repo/ProductRepository.java
@@ -22,4 +22,12 @@ public class ProductRepository extends WoocommerceRepository {
}
+ public WooLiveData> search(String term) {
+ final WooLiveData> callBack = new WooLiveData();
+
+ woocommerce.ProductRepository().search(term).enqueue(callBack);
+ return callBack;
+ }
+
+
}
diff --git a/app/src/main/java/me/gilo/wc/ui/product/ProductSearchActivity.kt b/app/src/main/java/me/gilo/wc/ui/product/ProductSearchActivity.kt
new file mode 100644
index 0000000..3ef054d
--- /dev/null
+++ b/app/src/main/java/me/gilo/wc/ui/product/ProductSearchActivity.kt
@@ -0,0 +1,132 @@
+package me.gilo.wc.ui.product
+
+import android.app.SearchManager
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.support.design.widget.Snackbar
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.GridLayoutManager
+import android.support.v7.widget.SearchView
+import android.view.Menu
+import android.widget.Toast
+import io.github.inflationx.viewpump.ViewPumpContextWrapper
+import me.gilo.wc.R
+
+import kotlinx.android.synthetic.main.activity_product_search.*
+import kotlinx.android.synthetic.main.content_shop.*
+import me.gilo.wc.adapter.ProductAdapter
+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
+import org.json.JSONObject
+import java.util.ArrayList
+
+class ProductSearchActivity : BaseActivity() {
+
+ lateinit var adapter: ProductAdapter
+ lateinit var products: ArrayList
+
+ lateinit var viewModel: ProductViewModel
+ val TAG = this::getLocalClassName
+
+ override fun attachBaseContext(newBase: Context) {
+ super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_product_search)
+ setSupportActionBar(toolbar)
+
+ viewModel = getViewModel(ProductViewModel::class.java)
+
+ title = "Search"
+
+ val layoutManager = GridLayoutManager(baseContext, 2)
+ rvShop.layoutManager = layoutManager
+ rvShop.isNestedScrollingEnabled = false
+
+ products = ArrayList()
+
+ adapter = ProductAdapter(products)
+ rvShop.adapter = adapter
+
+ handleIntent(intent)
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ handleIntent(intent)
+ }
+
+ private fun handleIntent(intent: Intent) {
+
+ if (Intent.ACTION_SEARCH == intent.action) {
+ val query = intent.getStringExtra(SearchManager.QUERY)
+ search(query)
+ }
+ }
+
+ private fun search(query : String) {
+ viewModel.search(query).observe(this, android.arch.lifecycle.Observer { response ->
+ when (response!!.status()) {
+ Status.LOADING -> {
+ showLoading("Performing search", "This will only take a short while")
+ }
+
+ Status.SUCCESS -> {
+ stopShowingLoading()
+
+ val productsResponse = response.data()
+ for (product in productsResponse) {
+ products.add(product)
+ }
+
+ adapter.notifyDataSetChanged()
+
+ }
+
+ Status.ERROR -> {
+ stopShowingLoading()
+
+ var message: String
+ var loginError = JSONObject(response.error().message)
+
+ if (loginError.has("status_message")) {
+ message = loginError.getString("status_message")
+ } else {
+ message = response.error().message.toString()
+ }
+
+ Toast.makeText(baseContext, message, Toast.LENGTH_LONG).show()
+ }
+
+ Status.EMPTY -> {
+ stopShowingLoading()
+ }
+ }
+
+ })
+
+ }
+
+ 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/ui/product/ShopActivity.kt b/app/src/main/java/me/gilo/wc/ui/product/ShopActivity.kt
index 3c4293a..953e0de 100644
--- a/app/src/main/java/me/gilo/wc/ui/product/ShopActivity.kt
+++ b/app/src/main/java/me/gilo/wc/ui/product/ShopActivity.kt
@@ -3,7 +3,9 @@ package me.gilo.wc.ui.product
import android.content.Context
import android.os.Bundle
import android.support.v7.widget.GridLayoutManager
+import android.view.Menu
import android.widget.Toast
+import com.miguelcatalan.materialsearchview.MaterialSearchView
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_shop.*
import kotlinx.android.synthetic.main.content_shop.*
@@ -16,6 +18,9 @@ import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.woodroid.models.Product
import org.json.JSONObject
import java.util.*
+import android.text.Editable
+import android.text.TextWatcher
+
class ShopActivity : BaseActivity() {
@@ -49,17 +54,29 @@ class ShopActivity : BaseActivity() {
products()
+ etSearch.addTextChangedListener(object : TextWatcher {
+
+ override fun afterTextChanged(s: Editable) {}
+ override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
+
+ override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
+ if (s.isNotEmpty()) {
+ search(s.toString())
+ }else{
+ products()
+ }
+ }
+ })
}
- private fun products() {
- viewModel.products().observe(this, android.arch.lifecycle.Observer { response ->
+ private fun search(query : String) {
+ viewModel.search(query).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
- showLoading("Performing log in", "This will only take a short while")
}
Status.SUCCESS -> {
- stopShowingLoading()
+ products.clear()
val productsResponse = response.data()
for (product in productsResponse) {
@@ -71,22 +88,12 @@ class ShopActivity : BaseActivity() {
}
Status.ERROR -> {
- stopShowingLoading()
- var message: String
- var loginError = JSONObject(response.error().message)
- if (loginError.has("status_message")) {
- message = loginError.getString("status_message")
- } else {
- message = response.error().message.toString()
- }
-
- Toast.makeText(baseContext, message, Toast.LENGTH_LONG).show()
}
Status.EMPTY -> {
- stopShowingLoading()
+
}
}
@@ -94,6 +101,43 @@ class ShopActivity : BaseActivity() {
}
+ private fun products() {
+ viewModel.products().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 onCreateOptionsMenu(menu: Menu): Boolean {
+ menuInflater.inflate(R.menu.products, menu)
+
+ return true
+ }
+
private lateinit var progressDialog: ProgressDialogFragment
fun showLoading(title: String, message: String) {
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 ce68eac..1df5280 100644
--- a/app/src/main/java/me/gilo/wc/viewmodels/ProductViewModel.java
+++ b/app/src/main/java/me/gilo/wc/viewmodels/ProductViewModel.java
@@ -20,4 +20,8 @@ public final class ProductViewModel extends ViewModel {
public WooLiveData> products() {
return productRepository.products();
}
+
+ public WooLiveData> search(String term) {
+ return productRepository.search(term);
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/baseline_filter_list_white_18.png b/app/src/main/res/drawable-hdpi/baseline_filter_list_white_18.png
new file mode 100644
index 0000000..88908b7
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/baseline_filter_list_white_18.png differ
diff --git a/app/src/main/res/drawable-hdpi/baseline_filter_list_white_24.png b/app/src/main/res/drawable-hdpi/baseline_filter_list_white_24.png
new file mode 100644
index 0000000..fec1fe4
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/baseline_filter_list_white_24.png differ
diff --git a/app/src/main/res/drawable-hdpi/baseline_filter_list_white_36.png b/app/src/main/res/drawable-hdpi/baseline_filter_list_white_36.png
new file mode 100644
index 0000000..5e8fde1
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/baseline_filter_list_white_36.png differ
diff --git a/app/src/main/res/drawable-hdpi/baseline_filter_list_white_48.png b/app/src/main/res/drawable-hdpi/baseline_filter_list_white_48.png
new file mode 100644
index 0000000..1263ae8
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/baseline_filter_list_white_48.png differ
diff --git a/app/src/main/res/drawable-mdpi/baseline_filter_list_white_18.png b/app/src/main/res/drawable-mdpi/baseline_filter_list_white_18.png
new file mode 100644
index 0000000..0dffc0b
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/baseline_filter_list_white_18.png differ
diff --git a/app/src/main/res/drawable-mdpi/baseline_filter_list_white_24.png b/app/src/main/res/drawable-mdpi/baseline_filter_list_white_24.png
new file mode 100644
index 0000000..e327bb0
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/baseline_filter_list_white_24.png differ
diff --git a/app/src/main/res/drawable-mdpi/baseline_filter_list_white_36.png b/app/src/main/res/drawable-mdpi/baseline_filter_list_white_36.png
new file mode 100644
index 0000000..fec1fe4
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/baseline_filter_list_white_36.png differ
diff --git a/app/src/main/res/drawable-mdpi/baseline_filter_list_white_48.png b/app/src/main/res/drawable-mdpi/baseline_filter_list_white_48.png
new file mode 100644
index 0000000..242ba3a
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/baseline_filter_list_white_48.png differ
diff --git a/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_18.png b/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_18.png
new file mode 100644
index 0000000..fec1fe4
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_18.png differ
diff --git a/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_24.png b/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_24.png
new file mode 100644
index 0000000..242ba3a
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_24.png differ
diff --git a/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_36.png b/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_36.png
new file mode 100644
index 0000000..1263ae8
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_36.png differ
diff --git a/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_48.png b/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_48.png
new file mode 100644
index 0000000..cb2207f
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/baseline_filter_list_white_48.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_18.png b/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_18.png
new file mode 100644
index 0000000..5e8fde1
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_18.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_24.png b/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_24.png
new file mode 100644
index 0000000..1263ae8
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_24.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_36.png b/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_36.png
new file mode 100644
index 0000000..afc68c4
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_36.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_48.png b/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_48.png
new file mode 100644
index 0000000..8604aba
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/baseline_filter_list_white_48.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_18.png b/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_18.png
new file mode 100644
index 0000000..1263ae8
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_18.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_24.png b/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_24.png
new file mode 100644
index 0000000..cb2207f
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_24.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_36.png b/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_36.png
new file mode 100644
index 0000000..8604aba
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_36.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_48.png b/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_48.png
new file mode 100644
index 0000000..7b4cc29
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/baseline_filter_list_white_48.png differ
diff --git a/app/src/main/res/drawable/baseline_filter_list_24.xml b/app/src/main/res/drawable/baseline_filter_list_24.xml
new file mode 100644
index 0000000..88cc530
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_filter_list_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/baseline_search_white_18dp.png b/app/src/main/res/drawable/baseline_search_white_18dp.png
new file mode 100644
index 0000000..bf2c964
Binary files /dev/null and b/app/src/main/res/drawable/baseline_search_white_18dp.png differ
diff --git a/app/src/main/res/layout/activity_product_search.xml b/app/src/main/res/layout/activity_product_search.xml
new file mode 100644
index 0000000..286ad3b
--- /dev/null
+++ b/app/src/main/res/layout/activity_product_search.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_shop.xml b/app/src/main/res/layout/activity_shop.xml
index d3bcd80..3282ab5 100644
--- a/app/src/main/res/layout/activity_shop.xml
+++ b/app/src/main/res/layout/activity_shop.xml
@@ -17,7 +17,47 @@
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
- app:popupTheme="@style/AppTheme.PopupOverlay"/>
+ app:popupTheme="@style/AppTheme.PopupOverlay">
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/content_product_search.xml b/app/src/main/res/layout/content_product_search.xml
new file mode 100644
index 0000000..a0df100
--- /dev/null
+++ b/app/src/main/res/layout/content_product_search.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/products.xml b/app/src/main/res/menu/products.xml
new file mode 100644
index 0000000..35fbee3
--- /dev/null
+++ b/app/src/main/res/menu/products.xml
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 184ee9b..59a0b0c 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 89c5ccb..f46e41b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,14 +1,17 @@
- 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
+ fonts/GT-America-Bold.otf
+ fonts/GT-America-Medium.otf
+ fonts/GT-America-Regular.otf
+ AddCouponActivity
+ CouponsActivity
+ search
+ Search product
+ ProductSearchActivity
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index e38303a..177cefc 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,20 +1,20 @@
-
-
+
+
-
+
-
+
-
+
diff --git a/app/src/main/res/xml/searchable.xml b/app/src/main/res/xml/searchable.xml
new file mode 100644
index 0000000..62b6e1f
--- /dev/null
+++ b/app/src/main/res/xml/searchable.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file