UI design for customer pages

This commit is contained in:
Gilbert Kimutai 2019-03-31 10:36:21 +03:00
parent 5410926f5a
commit 7fe30becb1
17 changed files with 372 additions and 5 deletions

View File

@ -13,6 +13,21 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<activity
android:name=".ui.customer.ShippingAddressActivity"
android:label="@string/title_activity_shipping_address"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.customer.BillingAddressActivity"
android:label="@string/title_activity_billing_address"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.customer.BasicCustomerDetailsActivity"
android:label="@string/title_activity_basic_customer_details"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.onboarding.UserDetailsActivity"
android:label="@string/title_activity_user_details"

View File

@ -5,6 +5,7 @@ import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import me.gilo.raison.ui.user.onboarding.SignInActivity
import me.gilo.raison.ui.user.onboarding.SignUpActivity
import me.gilo.wc.ui.customer.BasicCustomerDetailsActivity
import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.ui.product.ProductActivity
@ -16,7 +17,7 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
startActivity(Intent(baseContext, SignInActivity::class.java))
startActivity(Intent(baseContext, BasicCustomerDetailsActivity::class.java))
// val intent = Intent(baseContext, ProductActivity::class.java)
// intent.putExtra("productId", 63)

View File

@ -5,6 +5,10 @@ import dagger.android.ContributesAndroidInjector;
import me.gilo.raison.ui.user.onboarding.SignInActivity;
import me.gilo.raison.ui.user.onboarding.SignUpActivity;
import me.gilo.wc.MainActivity;
import me.gilo.wc.ui.WooDroidActivity;
import me.gilo.wc.ui.customer.BasicCustomerDetailsActivity;
import me.gilo.wc.ui.customer.BillingAddressActivity;
import me.gilo.wc.ui.customer.ShippingAddressActivity;
import me.gilo.wc.ui.home.HomeActivity;
import me.gilo.wc.ui.product.ProductActivity;
import me.gilo.wc.ui.product.ShopActivity;
@ -30,4 +34,13 @@ abstract class ActivitiesModule {
@ContributesAndroidInjector
abstract SignUpActivity contributesSignUpActivity();
@ContributesAndroidInjector
abstract BasicCustomerDetailsActivity contributesBasicCustomerDetailsActivity();
@ContributesAndroidInjector
abstract BillingAddressActivity contributesBillingAddressActivity();
@ContributesAndroidInjector
abstract ShippingAddressActivity contributesShippingAddressActivity();
}

View File

@ -8,10 +8,7 @@ import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import me.gilo.wc.utils.ViewModelFactory;
import me.gilo.wc.viewmodels.CategoryViewModel;
import me.gilo.wc.viewmodels.ProductViewModel;
import me.gilo.wc.viewmodels.ReviewViewModel;
import me.gilo.wc.viewmodels.UserViewModel;
import me.gilo.wc.viewmodels.*;
import javax.inject.Named;
import javax.inject.Singleton;
@ -37,6 +34,11 @@ public abstract class ViewModelModule {
@ViewModelKey(CategoryViewModel.class)
abstract ViewModel bindCategoryViewModel(CategoryViewModel viewModel);
@Binds
@IntoMap
@ViewModelKey(CustomerViewModel.class)
abstract ViewModel bindCustomerViewModel(CustomerViewModel viewModel);
@Binds
@IntoMap

View File

@ -0,0 +1,73 @@
package me.gilo.wc.repo;
import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.Woocommerce;
import me.gilo.woodroid.models.Customer;
import me.gilo.woodroid.models.Customer;
import me.gilo.woodroid.models.filters.CustomerFilter;
import javax.inject.Inject;
import java.util.List;
public class CustomerRepository {
@Inject
Woocommerce woocommerce;
@Inject
public CustomerRepository() {
}
public WooLiveData<Customer> create(Customer customer) {
final WooLiveData<Customer> callBack = new WooLiveData();
woocommerce.CustomerRepository().create(customer).enqueue(callBack);
return callBack;
}
public WooLiveData<Customer> customer(int id) {
final WooLiveData<Customer> callBack = new WooLiveData();
woocommerce.CustomerRepository().customer(id).enqueue(callBack);
return callBack;
}
public WooLiveData<List<Customer>> customers() {
final WooLiveData<List<Customer>> callBack = new WooLiveData();
woocommerce.CustomerRepository().customers().enqueue(callBack);
return callBack;
}
public WooLiveData<List<Customer>> customers(CustomerFilter customerFilter) {
final WooLiveData<List<Customer>> callBack = new WooLiveData();
woocommerce.CustomerRepository().customers(customerFilter).enqueue(callBack);
return callBack;
}
public WooLiveData<Customer> update(int id, Customer customer) {
final WooLiveData<Customer> callBack = new WooLiveData();
woocommerce.CustomerRepository().update(id, customer).enqueue(callBack);
return callBack;
}
public WooLiveData<Customer> delete(int id) {
final WooLiveData<Customer> callBack = new WooLiveData();
woocommerce.CustomerRepository().delete(id).enqueue(callBack);
return callBack;
}
public WooLiveData<Customer> delete(int id, boolean force) {
final WooLiveData<Customer> callBack = new WooLiveData();
woocommerce.CustomerRepository().delete(id, force).enqueue(callBack);
return callBack;
}
}

View File

@ -0,0 +1,41 @@
package me.gilo.wc.ui
import android.arch.lifecycle.ViewModel
import android.content.Context
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.wc.R
import kotlinx.android.synthetic.main.activity_basic_customer_details.*
import me.gilo.raison.ui.user.onboarding.SignInActivity
import me.gilo.wc.common.BaseActivity
import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.wc.viewmodels.UserViewModel
import java.util.regex.Matcher
import java.util.regex.Pattern
abstract class WooDroidActivity<T : ViewModel> : BaseActivity() {
abstract var viewModel : T
private lateinit var progressDialog: ProgressDialogFragment
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
private fun showLoading(title: String, message: String) {
val manager = supportFragmentManager
progressDialog = ProgressDialogFragment.newInstance(title, message)
progressDialog.isCancelable = false
progressDialog.show(manager, "progress")
}
private fun stopShowingLoading() {
progressDialog.dismiss()
}
}

View File

@ -0,0 +1,38 @@
package me.gilo.wc.ui.customer
import android.content.Context
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.wc.R
import kotlinx.android.synthetic.main.activity_basic_customer_details.*
import me.gilo.raison.ui.user.onboarding.SignInActivity
import me.gilo.wc.common.BaseActivity
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.wc.viewmodels.UserViewModel
import java.util.regex.Matcher
import java.util.regex.Pattern
class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
override lateinit var viewModel : CustomerViewModel
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_basic_customer_details)
viewModel = getViewModel(CustomerViewModel::class.java)
title = "Basic Details"
}
}

View File

@ -0,0 +1,28 @@
package me.gilo.wc.ui.customer
import android.content.Context
import android.os.Bundle
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_billing_address.*
import me.gilo.wc.R
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.viewmodels.CustomerViewModel
class BillingAddressActivity : WooDroidActivity<CustomerViewModel>() {
override lateinit var viewModel : CustomerViewModel
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_billing_address)
viewModel = getViewModel(CustomerViewModel::class.java)
title = "Billing Address"
}
}

View File

@ -0,0 +1,28 @@
package me.gilo.wc.ui.customer
import android.content.Context
import android.os.Bundle
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_shipping_address.*
import me.gilo.wc.R
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.viewmodels.CustomerViewModel
class ShippingAddressActivity : WooDroidActivity<CustomerViewModel>() {
override lateinit var viewModel : CustomerViewModel
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_shipping_address)
viewModel = getViewModel(CustomerViewModel::class.java)
title = "Shipping Address"
}
}

View File

@ -0,0 +1,51 @@
package me.gilo.wc.viewmodels;
import android.arch.lifecycle.ViewModel;
import me.gilo.wc.common.WooLiveData;
import me.gilo.wc.repo.CustomerRepository;
import me.gilo.woodroid.models.Customer;
import me.gilo.woodroid.models.filters.CustomerFilter;
import javax.inject.Inject;
import java.util.List;
public final class CustomerViewModel extends ViewModel {
private final CustomerRepository customerRepository;
@Inject
CustomerViewModel(CustomerRepository customerRepository) {
this.customerRepository = customerRepository;
}
public WooLiveData<Customer> create(Customer customer) {
return customerRepository.create(customer);
}
public WooLiveData<Customer> customer(int id) {
return customerRepository.customer(id);
}
public WooLiveData<List<Customer>> customers() {
return customerRepository.customers();
}
public WooLiveData<List<Customer>> customers(CustomerFilter customerFilter) {
return customerRepository.customers(customerFilter);
}
public WooLiveData<Customer> update(int id, Customer customer) {
return customerRepository.update(id, customer);
}
public WooLiveData<Customer> delete(int id) {
return customerRepository.delete(id);
}
public WooLiveData<Customer> delete(int id, boolean force) {
return customerRepository.delete(id, force);
}
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.customer.BasicCustomerDetailsActivity">
<include layout="@layout/customer_basic_details"/>
</android.support.design.widget.CoordinatorLayout>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.customer.BillingAddressActivity">
<include layout="@layout/customer_billing_address"/>
</android.support.design.widget.CoordinatorLayout>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.customer.ShippingAddressActivity">
<include layout="@layout/customer_shipping_address"/>
</android.support.design.widget.CoordinatorLayout>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_basic_customer_details"
tools:context=".ui.customer.BasicCustomerDetailsActivity">
</android.support.constraint.ConstraintLayout>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_billing_address"
tools:context=".ui.customer.BillingAddressActivity">
</android.support.constraint.ConstraintLayout>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_shipping_address"
tools:context=".ui.customer.ShippingAddressActivity">
</android.support.constraint.ConstraintLayout>

View File

@ -33,5 +33,8 @@
<string name="lorem">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s</string>
<string name="title_activity_my_orders">MyOrdersActivity</string>
<string name="title_activity_user_details">UserDetailsActivity</string>
<string name="title_activity_basic_customer_details">BasicCustomerDetailsActivity</string>
<string name="title_activity_billing_address">BillingAddressActivity</string>
<string name="title_activity_shipping_address">ShippingAddressActivity</string>
</resources>