From ceda450bb8430031210251a502fc8a49a74655a1 Mon Sep 17 00:00:00 2001 From: Gilbert Kimutai Date: Tue, 23 Apr 2019 06:21:32 +0300 Subject: [PATCH] WIP - Added my orders page --- .../wc/adapter/viewholder/OrderViewHolder.kt | 2 +- .../java/me/gilo/wc/di/ActivitiesModule.java | 4 + .../java/me/gilo/wc/di/ViewModelModule.java | 6 +- .../me/gilo/wc/ui/home/ProfileFragment.kt | 5 + .../me/gilo/wc/ui/order/MyOrdersActivity.kt | 91 ++++++++++++++++++- .../me/gilo/wc/viewmodels/OrderViewModel.java | 57 ++++++++++++ .../main/res/layout/activity_my_orders.xml | 48 ++++++++-- app/src/main/res/layout/content_my_orders.xml | 39 +++++++- app/src/main/res/layout/fragment_profile.xml | 1 + app/src/main/res/layout/single_order_item.xml | 3 +- .../java/me/gilo/woodroid/models/Order.java | 2 +- 11 files changed, 239 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/me/gilo/wc/viewmodels/OrderViewModel.java diff --git a/app/src/main/java/me/gilo/wc/adapter/viewholder/OrderViewHolder.kt b/app/src/main/java/me/gilo/wc/adapter/viewholder/OrderViewHolder.kt index 493f7c7..fb7d05b 100644 --- a/app/src/main/java/me/gilo/wc/adapter/viewholder/OrderViewHolder.kt +++ b/app/src/main/java/me/gilo/wc/adapter/viewholder/OrderViewHolder.kt @@ -16,7 +16,7 @@ class OrderViewHolder(val context: Context, itemView: View) : fun renderView(order: Order) { val tvTitle = itemView.findViewById(R.id.tvTitle) - tvTitle.text = order.orderNumber + tvTitle.text = "#" + order.orderNumber } 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 b5ae8b1..6dc0163 100644 --- a/app/src/main/java/me/gilo/wc/di/ActivitiesModule.java +++ b/app/src/main/java/me/gilo/wc/di/ActivitiesModule.java @@ -12,6 +12,7 @@ import me.gilo.wc.ui.customer.ProfileActivity; import me.gilo.wc.ui.customer.ShippingAddressActivity; import me.gilo.wc.ui.home.HomeActivity; import me.gilo.wc.ui.onboarding.AnonymousSignInActivity; +import me.gilo.wc.ui.order.MyOrdersActivity; import me.gilo.wc.ui.product.CartActivity; import me.gilo.wc.ui.product.ProductActivity; import me.gilo.wc.ui.product.ShopActivity; @@ -55,4 +56,7 @@ abstract class ActivitiesModule { @ContributesAndroidInjector abstract AnonymousSignInActivity contributesAnonymousSignInActivity(); + @ContributesAndroidInjector + abstract MyOrdersActivity contributesMyOrdersActivity(); + } diff --git a/app/src/main/java/me/gilo/wc/di/ViewModelModule.java b/app/src/main/java/me/gilo/wc/di/ViewModelModule.java index 3b8157e..32ec0be 100644 --- a/app/src/main/java/me/gilo/wc/di/ViewModelModule.java +++ b/app/src/main/java/me/gilo/wc/di/ViewModelModule.java @@ -7,6 +7,7 @@ import dagger.Binds; import dagger.Module; import dagger.Provides; import dagger.multibindings.IntoMap; +import me.gilo.wc.ui.order.MyOrdersActivity; import me.gilo.wc.utils.ViewModelFactory; import me.gilo.wc.viewmodels.*; @@ -44,7 +45,10 @@ public abstract class ViewModelModule { @ViewModelKey(CartViewModel.class) abstract ViewModel bindCartViewModel(CartViewModel viewModel); - + @Binds + @IntoMap + @ViewModelKey(OrderViewModel.class) + abstract ViewModel bindOrderViewModel(OrderViewModel viewModel); @Binds @IntoMap diff --git a/app/src/main/java/me/gilo/wc/ui/home/ProfileFragment.kt b/app/src/main/java/me/gilo/wc/ui/home/ProfileFragment.kt index e338852..bf61cb7 100644 --- a/app/src/main/java/me/gilo/wc/ui/home/ProfileFragment.kt +++ b/app/src/main/java/me/gilo/wc/ui/home/ProfileFragment.kt @@ -11,6 +11,7 @@ import kotlinx.android.synthetic.main.fragment_profile.* import me.gilo.raison.ui.user.onboarding.SignUpActivity import me.gilo.wc.R import me.gilo.wc.ui.customer.ProfileActivity +import me.gilo.wc.ui.order.MyOrdersActivity import me.gilo.wc.viewmodels.ProductViewModel import me.gilo.wc.viewmodels.UserViewModel @@ -53,6 +54,10 @@ class ProfileFragment : Fragment() { startActivity(Intent(activity, SignUpActivity::class.java)) } + llMyOrders.setOnClickListener{ + startActivity(Intent(activity, MyOrdersActivity::class.java)) + } + } diff --git a/app/src/main/java/me/gilo/wc/ui/order/MyOrdersActivity.kt b/app/src/main/java/me/gilo/wc/ui/order/MyOrdersActivity.kt index d710a9f..519a0a4 100644 --- a/app/src/main/java/me/gilo/wc/ui/order/MyOrdersActivity.kt +++ b/app/src/main/java/me/gilo/wc/ui/order/MyOrdersActivity.kt @@ -1,19 +1,100 @@ package me.gilo.wc.ui.order +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 me.gilo.wc.R - +import android.support.v7.widget.LinearLayoutManager +import android.view.View +import io.github.inflationx.viewpump.ViewPumpContextWrapper import kotlinx.android.synthetic.main.activity_my_orders.* +import kotlinx.android.synthetic.main.content_my_orders.* +import kotlinx.android.synthetic.main.state_empty.* +import me.gilo.wc.R +import me.gilo.wc.adapter.OrderAdapter +import me.gilo.wc.common.Status +import me.gilo.wc.ui.WooDroidActivity +import me.gilo.wc.ui.home.HomeActivity +import me.gilo.wc.viewmodels.OrderViewModel +import me.gilo.woodroid.models.Order -class MyOrdersActivity : AppCompatActivity() { +class MyOrdersActivity : WooDroidActivity() { + + + override lateinit var viewModel: OrderViewModel + var orders: ArrayList = ArrayList() + + lateinit var adapter: OrderAdapter + + override fun attachBaseContext(newBase: Context) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my_orders) setSupportActionBar(toolbar) + viewModel = getViewModel(OrderViewModel::class.java) + title = "My Orders" + + val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false) + rvOrders.layoutManager = layoutManager + rvOrders.isNestedScrollingEnabled = false + + orders = ArrayList() + + adapter = OrderAdapter(orders) + rvOrders.adapter = adapter + + orders() + + llEmptyState_layout.visibility = View.GONE + } + private fun showEmpty(title : String, description : String) { + tvEmptyState_title.text = title + tvEmptyState_description.text = description + + llEmptyState_layout.visibility = View.VISIBLE + + bEmptyState_action.setOnClickListener{ + startActivity(Intent(baseContext, HomeActivity::class.java)) + } + } + + private fun orders() { + viewModel.orders().observe(this, android.arch.lifecycle.Observer { response -> + when (response!!.status()) { + Status.LOADING -> { + showLoading() + } + + Status.SUCCESS -> { + orders.clear() + stopShowingLoading() + + for (order in response.data()) { + orders.add(order) + + } + + adapter.notifyDataSetChanged() + + } + + Status.ERROR -> { + stopShowingLoading() + } + + Status.EMPTY -> { + stopShowingLoading() + + showEmpty("No orders", "Seems like you haven't ordered anything yet!") + } + } + + }) + + } } diff --git a/app/src/main/java/me/gilo/wc/viewmodels/OrderViewModel.java b/app/src/main/java/me/gilo/wc/viewmodels/OrderViewModel.java new file mode 100644 index 0000000..40718a0 --- /dev/null +++ b/app/src/main/java/me/gilo/wc/viewmodels/OrderViewModel.java @@ -0,0 +1,57 @@ +package me.gilo.wc.viewmodels; + +import android.arch.lifecycle.ViewModel; +import me.gilo.wc.common.WooLiveData; +import me.gilo.wc.repo.OrderRepository; +import me.gilo.wc.repo.ReviewRepository; +import me.gilo.woodroid.models.Order; +import me.gilo.woodroid.models.ProductReview; +import me.gilo.woodroid.models.filters.OrderFilter; + +import javax.inject.Inject; +import java.util.List; + + +public final class OrderViewModel extends ViewModel { + private final OrderRepository orderRepository; + + @Inject + OrderViewModel(OrderRepository orderRepository) { + this.orderRepository = orderRepository; + } + + public WooLiveData addToCart(int productId) { + return orderRepository.addToCart(productId); + } + + public WooLiveData create(Order order) { + return orderRepository.create(order); + } + + + public WooLiveData order(int id) { + + return orderRepository.order(id); + } + + public WooLiveData> orders() { + return orderRepository.orders(); + } + + public WooLiveData> orders(OrderFilter orderFilter) { + return orderRepository.orders(orderFilter); + } + + public WooLiveData update(int id, Order order) { + return orderRepository.update(id, order); + } + + public WooLiveData delete(int id) { + return orderRepository.delete(id); + } + + public WooLiveData delete(int id, boolean force) { + return orderRepository.delete(id, force); + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_my_orders.xml b/app/src/main/res/layout/activity_my_orders.xml index cb35af9..99fd794 100644 --- a/app/src/main/res/layout/activity_my_orders.xml +++ b/app/src/main/res/layout/activity_my_orders.xml @@ -23,12 +23,48 @@ - + + + android:background="@color/colorPrimary" + android:orientation="horizontal" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:paddingRight="16dp" + android:layout_margin="16dp" + android:gravity="center" + android:layout_gravity="bottom" + android:elevation="2dp" + android:id="@+id/flSave" + > + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_my_orders.xml b/app/src/main/res/layout/content_my_orders.xml index b358090..67418a6 100644 --- a/app/src/main/res/layout/content_my_orders.xml +++ b/app/src/main/res/layout/content_my_orders.xml @@ -1,12 +1,43 @@ - + > - \ No newline at end of file + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml index f675279..2b5a28c 100644 --- a/app/src/main/res/layout/fragment_profile.xml +++ b/app/src/main/res/layout/fragment_profile.xml @@ -124,6 +124,7 @@