Compare commits

..

35 Commits

Author SHA1 Message Date
Gilbert Kimutai
f561de2e72
Update README.md 2020-05-05 12:45:38 +03:00
Gilbert Kimutai
b6e5a32cd3 icon change on add to cart 2020-03-24 16:10:30 +03:00
Gilbert Kimutai
b941c425e8 Merge remote-tracking branch 'origin/master' 2020-03-15 13:04:07 +03:00
Gilbert Kimutai
250b805126 added offline cart repo 2020-03-15 13:03:52 +03:00
Gilbert Kimutai
7ffffd7e80 Added serialization annotation to attributes 2020-03-02 16:34:37 +03:00
Gilbert Kimutai
6d401b1f87
Added slack link 2020-01-08 06:11:36 +03:00
Gilbert Kimutai
00799f0830
Merge pull request #14 from gilokimu/cocart
Cocart Integration
2019-12-28 07:44:41 +03:00
Gilbert Kimutai
d528e38709 updated the cocart implementation 2019-12-17 05:15:48 +03:00
Gilbert Kimutai
e07d3236a3 added cocart api structure 2019-11-30 17:36:59 +03:00
Gilbert Kimutai
b7b8d020b7 update to androidx 2019-11-30 12:15:29 +03:00
Gilbert Kimutai
bf39bba675 Merge branch 'master' of https://github.com/gilokimu/WooDroid
 Conflicts:
	.idea/gradle.xml
2019-11-28 06:21:45 +03:00
Gilbert Kimutai
d0e88fa726 added working demo to test 2019-11-28 06:21:34 +03:00
gilo
0b3045ae81 added categories 2019-11-02 10:28:54 +03:00
Gilbert Kimutai
24c45491b6
Update README.md 2019-09-25 07:56:59 +03:00
Gilbert Kimutai
2cc68830e4 added working demo to test 2019-08-14 06:42:17 +03:00
Gilbert Kimutai
2f885897a0 added cart abstraction 2019-07-08 19:36:33 +03:00
Gilbert Kimutai
6591cf8f95 added cart abstraction 2019-07-08 06:19:41 +03:00
Gilbert Kimutai
47e5575417 updated fully to Kotlin 2019-06-08 12:27:15 +03:00
Gilbert Kimutai
7b13ab92c6
Merge pull request #8 from gilokimu/kotlin_refactor
Kotlin refactor
2019-06-08 12:13:38 +03:00
Gilbert Kimutai
f3deac9ea0 updated to kotlin 2019-06-08 12:12:54 +03:00
Gilbert Kimutai
51e651de76 started Kotlin refactor 2019-06-08 04:08:53 +03:00
Gilbert Kimutai
b1de98db52
Icon addition
Added icon on readme
2019-06-01 10:52:45 +03:00
Gilbert Kimutai
5bb5bd650e updated launcher icon 2019-06-01 10:42:39 +03:00
Gilbert Kimutai
33b5a96a69 migrated the package names 2019-06-01 10:37:22 +03:00
Gilbert Kimutai
8e49de29da
Merge pull request #7 from Aroniez/master
Java to kotlin conversion
2019-06-01 09:52:11 +03:00
Aaron Rono
38db311926 java to kotlin conversion 2019-05-31 16:31:56 +03:00
Gilbert Kimutai
fcaec04239 updated order detailed page 2019-05-21 05:54:21 +03:00
Gilbert Kimutai
31602df99e Added order detailed page 2019-05-21 05:21:28 +03:00
Gilbert Kimutai
1ec0747e26 complete order page 2019-04-25 06:15:39 +03:00
Gilbert Kimutai
ceda450bb8 WIP - Added my orders page 2019-04-23 06:21:32 +03:00
Gilbert Kimutai
3b08a0541c order billing and shipping address 2019-04-22 07:04:56 +03:00
Gilbert Kimutai
e8fc0899ca Add to cart function 2019-04-22 06:57:55 +03:00
Gilbert Kimutai
6b94ee730d Merge remote-tracking branch 'origin/master' 2019-04-17 05:04:22 +03:00
Gilbert Kimutai
b87f96d336 updated the callback classes 2019-04-17 04:58:55 +03:00
Gilbert Kimutai
95a8d53349
Updated the app version
updated to 0.2.0
2019-04-17 04:36:10 +03:00
567 changed files with 9821 additions and 10539 deletions

View File

@ -1,8 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true" />
</AndroidXmlCodeStyleSettings>
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
@ -12,6 +9,113 @@
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="USE_TAB_CHARACTER" value="true" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />

13
.idea/compiler.xml generated Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel>
<module name="app" target="1.8" />
<module name="cocart" target="1.7" />
<module name="core" target="1.7" />
<module name="firebasecart" target="1.8" />
<module name="offlinecart" target="1.8" />
<module name="woodroid" target="1.8" />
</bytecodeTargetLevel>
</component>
</project>

7
.idea/gradle.xml generated
View File

@ -1,14 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="delegatedBuild" value="false" />
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/cocart" />
<option value="$PROJECT_DIR$/core" />
<option value="$PROJECT_DIR$/firebasecart" />
<option value="$PROJECT_DIR$/offlinecart" />
<option value="$PROJECT_DIR$/woodroid" />
</set>
</option>

View File

@ -1,5 +1,8 @@
# Woocommerce Android SDK
<img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png"/>
# Woocommerce Android SDK
This is an woocommerce api client for android
<img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916911644.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916952806.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916959446.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916965766.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916980710.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916989454.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553917011606.jpg" width="285"/>
@ -27,7 +30,7 @@ Step 2. Add the dependency
<dependency>
<groupId>com.github.gilokimu</groupId>
<artifactId>woodroid</artifactId>
<version>0.1.0</version>
<version>0.2.0</version>
</dependency>
```
@ -46,7 +49,7 @@ allprojects {
Step 2. Add the dependency
```gradle
dependencies {
implementation 'com.github.gilokimu:woodroid:0.1.0'
implementation 'com.github.gilokimu:woodroid:0.2.0'
}
```
@ -57,6 +60,16 @@ Generate API credentials (Consumer Key & Consumer Secret) following this instruc
Check out the WooCommerce API endpoints and data that can be manipulated in <https://woocommerce.github.io/woocommerce-rest-api-docs/>.
## Demo
I have left consumer key and secret within the app, for you to test the app without an installation of wordpress. To use my installation of wordpress, here are the credentials:
username: demo
password: demo2019
https://gilo.me/store/wp-admin
PS/ Do no harm
## Setup
Setup for the new WP REST API integration (WooCommerce 2.6 or later):
@ -224,5 +237,10 @@ The sample app implements an MVVM approach which would look slightly different f
## Contribution
Contributions are highly welcomed, just create a PR
## Slack
You can also reach out through <a href="https://join.slack.com/t/woodroid/shared_invite/enQtODg1ODYzMDAzOTcxLTE4NDA0MTYyYjY5ZmVmNTU4OTEzYWQzZDcwN2Y1ZTZkMzk4ZDY0ZGU4NmZlMzQ1NjlhM2RlZDc4Mjc4ZjE2NzI">slack</a> in case of any issues with installation or feature request
## Love the Project?
You can donate to support the project futher.<a class="donate-with-crypto" href="https://commerce.coinbase.com/checkout/3efb7008-27b1-4c64-934b-791e5c1a6cda"> Donate with Crypto </a>

View File

@ -1,19 +1,18 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 28
compileSdkVersion 29
defaultConfig {
applicationId "me.gilo.wc"
applicationId "me.gilo.woodroid.app"
minSdkVersion 16
targetSdkVersion 28
targetSdkVersion 29
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
@ -34,75 +33,178 @@ android {
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
dataBinding {
enabled = true
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
// To inline the bytecode built with JVM target 1.8 into
// bytecode that is being built with JVM target 1.6. (e.g. navArgs)
}
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == "com.android.support") {
if (!requested.name.startsWith("multidex")) {
details.useVersion "26.+"
}
}
}
all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
ext {
arch_version = '1.1.1'
firebase_version = '11.8.0'
support_lib_version = '28.0.0'
dagger_version = '2.14.1'
play_services = '15.0.1'
roomVersion = '1.1.1'
coroutinesVersion = "1.1.1"
}
kapt {
generateStubs = true
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
implementation 'androidx.paging:paging-runtime-ktx:2.1.0'
implementation 'com.google.android.gms:play-services-auth:17.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
implementation 'com.google.firebase:firebase-database:16.0.4'
implementation 'com.google.firebase:firebase-auth:16.0.4'
implementation 'com.google.firebase:firebase-core:16.0.4'
implementation 'com.google.firebase:firebase-firestore:17.1.1'
implementation 'com.google.firebase:firebase-storage:16.0.4'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// Support Libs
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.browser:browser:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.viewpager2:viewpager2:1.0.0-rc01'
//firebase stuff
implementation 'com.google.firebase:firebase-database:19.2.0'
implementation 'com.google.firebase:firebase-auth:19.1.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-firestore:21.3.0'
implementation 'com.google.firebase:firebase-storage:19.1.0'
implementation 'com.firebaseui:firebase-ui-database:4.2.0'
implementation 'com.firebaseui:firebase-ui-firestore:4.2.0'
implementation 'com.firebaseui:firebase-ui-storage:4.2.0'
implementation 'com.google.firebase:firebase-messaging:17.1.0'
implementation 'com.google.firebase:firebase-messaging:20.0.1'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'io.github.inflationx:calligraphy3:3.0.0'
implementation 'io.github.inflationx:viewpump:1.0.0'
implementation 'io.github.inflationx:viewpump:2.0.3'
implementation 'org.greenrobot:eventbus:3.1.1'
implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'com.android.support:support-v4:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation project(path: ':woodroid')
implementation 'de.hdodenhof:circleimageview:2.1.0'
implementation 'com.romandanylyk:pageindicatorview:0.2.0@aar'
// Android architecture components
implementation "android.arch.lifecycle:extensions:$arch_version"
annotationProcessor "android.arch.lifecycle:compiler:$arch_version"
implementation "android.arch.paging:runtime:1.0.1"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-rc02"
implementation 'androidx.core:core-ktx:1.1.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-rc02"
// Room components
implementation "androidx.room:room-runtime:2.2.1"
kapt "androidx.room:room-compiler:2.2.1"
androidTestImplementation "androidx.room:room-testing:2.2.1"
// Dagger.
implementation "com.google.dagger:dagger:$dagger_version"
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version"
annotationProcessor "com.google.dagger:dagger-android-processor:$dagger_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
implementation "com.google.dagger:dagger:2.15"
implementation "com.google.dagger:dagger-android:2.15"
implementation "com.google.dagger:dagger-android-support:2.15"
kapt "com.google.dagger:dagger-android-processor:2.15"
kapt "com.google.dagger:dagger-compiler:2.15"
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.miguelcatalan:materialsearchview:1.4.0'
implementation 'me.relex:circleindicator:1.2.2@aar'
// Third-party libraries
implementation 'net.danlew:android.joda:2.9.9.4'
implementation 'org.greenrobot:eventbus:3.1.1'
implementation 'android.arch.lifecycle:livedata:1.1.1'
implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3'
implementation 'com.akexorcist:googledirectionlibrary:1.0.5'
//noinspection GradleDynamicVersion
implementation 'com.google.maps.android:android-maps-utils:0.5+'
implementation 'com.github.aarsy.googlemapsanimations:googlemapsanimations:1.0.5'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.jakewharton.retrofit:retrofit1-okhttp3-client:1.1.0'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'io.reactivex:rxjava:1.3.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.room:room-runtime:2.2.2'
kapt 'androidx.room:room-compiler:2.2.2'
implementation 'org.greenrobot:eventbus:3.1.1'
implementation "com.hootsuite.android:nachos:1.1.1"
implementation 'me.relex:circleindicator:1.2.2@aar'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
implementation project(path: ':woodroid')
implementation project(path: ':firebasecart')
implementation project(path: ':core')
implementation project(path: ':cocart')
implementation project(path: ':offlinecart')
debugImplementation 'im.dino:dbinspector:3.4.1@aar'
implementation 'org.fabiomsr:moneytextview:1.1.0'
}

View File

@ -10,7 +10,7 @@
"client_info": {
"mobilesdk_app_id": "1:159460744011:android:6480f4108da5caac",
"android_client_info": {
"package_name": "me.gilo.wc"
"package_name": "me.gilo.woodroid.app"
}
},
"oauth_client": [

View File

@ -1,4 +1,4 @@
package me.gilo.wc
package me.gilo.woodroid
import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4

View File

@ -1,65 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.gilo.wc">
xmlns:tools="http://schemas.android.com/tools"
package="me.gilo.woodroid.app">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:name=".WcApp"
android:name="me.gilo.woodroid.app.WcApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name=".ui.onboarding.AnonymousSignInActivity"
android:name="me.gilo.woodroid.app.ui.order.OrderActivity"
android:label="@string/title_activity_order"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name="me.gilo.woodroid.app.ui.onboarding.AnonymousSignInActivity"
android:label="@string/title_activity_anonymous_sign_in"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.checkout.CheckoutActivity"
android:name="me.gilo.woodroid.app.ui.checkout.CheckoutActivity"
android:label="@string/title_activity_checkout"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.product.CartActivity"
android:name="me.gilo.woodroid.app.ui.product.CartActivity"
android:label="@string/title_activity_cart"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.customer.ProfileActivity"
android:name="me.gilo.woodroid.app.ui.customer.ProfileActivity"
android:label="@string/title_activity_profile"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.customer.ShippingAddressActivity"
android:name="me.gilo.woodroid.app.ui.customer.ShippingAddressActivity"
android:label="@string/title_activity_shipping_address"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.customer.BillingAddressActivity"
android:name="me.gilo.woodroid.app.ui.customer.BillingAddressActivity"
android:label="@string/title_activity_billing_address"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.customer.BasicCustomerDetailsActivity"
android:name="me.gilo.woodroid.app.ui.customer.BasicCustomerDetailsActivity"
android:label="@string/title_activity_basic_customer_details"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.onboarding.UserDetailsActivity"
android:name="me.gilo.woodroid.app.ui.onboarding.UserDetailsActivity"
android:label="@string/title_activity_user_details"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.order.MyOrdersActivity"
android:name="me.gilo.woodroid.app.ui.order.MyOrdersActivity"
android:label="@string/title_activity_my_orders"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.home.HomeActivity"
android:name="me.gilo.woodroid.app.ui.home.HomeActivity"
android:label="@string/title_activity_home"
android:theme="@style/AppTheme.NoActionBar">
</activity>
@ -84,12 +91,12 @@
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.product.ProductActivity"
android:name="me.gilo.woodroid.app.ui.product.ProductActivity"
android:label="@string/title_activity_product"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.product.ProductSearchActivity"
android:name="me.gilo.woodroid.app.ui.product.ProductSearchActivity"
android:label="@string/title_activity_product_search"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
@ -97,34 +104,34 @@
</intent-filter>
</activity>
<activity
android:name=".ui.coupon.CouponActivity"
android:name="me.gilo.woodroid.app.ui.coupon.CouponActivity"
android:label="@string/title_activity_coupon"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.coupon.CouponsActivity"
android:name="me.gilo.woodroid.app.ui.coupon.CouponsActivity"
android:label="@string/title_activity_coupons"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.coupon.AddCouponActivity"
android:name="me.gilo.woodroid.app.ui.coupon.AddCouponActivity"
android:label="@string/title_activity_add_coupon"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.MenuActivity"
android:name="me.gilo.woodroid.app.ui.MenuActivity"
android:label="@string/title_activity_menu"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.product.ShopActivity"
android:name="me.gilo.woodroid.app.ui.product.ShopActivity"
android:label="@string/title_activity_shop"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
<activity android:name=".MainActivity">
<activity android:name="me.gilo.woodroid.app.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

View File

@ -1,32 +0,0 @@
package me.gilo.wc;
import android.app.Application;
import dagger.android.AndroidInjector;
import dagger.android.DaggerApplication;
import io.github.inflationx.calligraphy3.CalligraphyConfig;
import io.github.inflationx.calligraphy3.CalligraphyInterceptor;
import io.github.inflationx.viewpump.ViewPump;
import me.gilo.wc.di.DaggerAppComponent;
public class WcApp extends DaggerApplication {
@Override
public void onCreate() {
super.onCreate();
ViewPump.init(ViewPump.builder()
.addInterceptor(new CalligraphyInterceptor(
new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/GT-America-Regular.otf")
.setFontAttrId(R.attr.fontPath)
.build()))
.build());
}
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent.create();
}
}

View File

@ -1,37 +0,0 @@
package me.gilo.wc.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.CartViewHolder;
import me.gilo.wc.adapter.viewholder.CategoryViewHolder;
import me.gilo.wc.models.CartLineItem;
import me.gilo.woodroid.models.CartItem;
import me.gilo.woodroid.models.Category;
import java.util.List;
public class CartAdapter extends RecyclerView.Adapter<CartViewHolder> {
private List<CartLineItem> cartLineItems;
public CartAdapter(List<CartLineItem> cartLineItems) {
this.cartLineItems = cartLineItems;
}
@Override
public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new CartViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_cart_item, parent, false));
}
@Override
public void onBindViewHolder(CartViewHolder holder, int position) {
holder.renderView(cartLineItems.get(position));
}
@Override
public int getItemCount() {
return cartLineItems.size() == 0 ? 0 : cartLineItems.size();
}
}

View File

@ -1,34 +0,0 @@
package me.gilo.wc.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.CategoryViewHolder;
import me.gilo.woodroid.models.Category;
import java.util.List;
public class CategoryAdapter extends RecyclerView.Adapter<CategoryViewHolder> {
private List<Category> categories;
public CategoryAdapter(List<Category> categories) {
this.categories = categories;
}
@Override
public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new CategoryViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_category_item, parent, false));
}
@Override
public void onBindViewHolder(CategoryViewHolder holder, int position) {
holder.renderView(categories.get(position));
}
@Override
public int getItemCount() {
return categories.size() == 0 ? 0 : categories.size();
}
}

View File

@ -1,34 +0,0 @@
package me.gilo.wc.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.CouponViewHolder;
import me.gilo.woodroid.models.Coupon;
import java.util.List;
public class CouponAdapter extends RecyclerView.Adapter<CouponViewHolder> {
private List<Coupon> coupons;
public CouponAdapter(List<Coupon> coupons) {
this.coupons = coupons;
}
@Override
public CouponViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new CouponViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_coupon_item, parent, false));
}
@Override
public void onBindViewHolder(CouponViewHolder holder, int position) {
holder.renderView(coupons.get(position));
}
@Override
public int getItemCount() {
return coupons.size() == 0 ? 0 : coupons.size();
}
}

View File

@ -1,34 +0,0 @@
package me.gilo.wc.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.ProductViewHolder;
import me.gilo.woodroid.models.Product;
import java.util.List;
public class HomeProductAdapter extends RecyclerView.Adapter<ProductViewHolder> {
private List<Product> products;
public HomeProductAdapter(List<Product> products) {
this.products = products;
}
@Override
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ProductViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_home_product_item, parent, false));
}
@Override
public void onBindViewHolder(ProductViewHolder holder, int position) {
holder.renderView(products.get(position));
}
@Override
public int getItemCount() {
return products.size() == 0 ? 0 : products.size();
}
}

View File

@ -1,34 +0,0 @@
package me.gilo.wc.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.ProductViewHolder;
import me.gilo.woodroid.models.Product;
import java.util.List;
public class ListAdapter extends RecyclerView.Adapter<ProductViewHolder> {
private List<Product> products;
public ListAdapter(List<Product> products) {
this.products = products;
}
@Override
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ProductViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_product_item, parent, false));
}
@Override
public void onBindViewHolder(ProductViewHolder holder, int position) {
holder.renderView(products.get(position));
}
@Override
public int getItemCount() {
return products.size() == 0 ? 0 : products.size();
}
}

View File

@ -1,36 +0,0 @@
package me.gilo.wc.adapter;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.MenuViewHolder;
import java.util.HashMap;
import java.util.List;
public class MenuAdapter extends RecyclerView.Adapter<MenuViewHolder> {
private List<String> titles;
public MenuAdapter( List<String> titles) {
this.titles = titles;
}
@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MenuViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_menu_item, parent, false));
}
@Override
public void onBindViewHolder(MenuViewHolder holder, int position) {
holder.renderView(titles.get(position));
}
@Override
public int getItemCount() {
return titles.size() == 0 ? 0 : titles.size();
}
}

View File

@ -1,36 +0,0 @@
package me.gilo.wc.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.CategoryViewHolder;
import me.gilo.wc.adapter.viewholder.OrderViewHolder;
import me.gilo.woodroid.models.Category;
import me.gilo.woodroid.models.Order;
import java.util.List;
public class OrderAdapter extends RecyclerView.Adapter<OrderViewHolder> {
private List<Order> orders;
public OrderAdapter(List<Order> orders) {
this.orders = orders;
}
@Override
public OrderViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new OrderViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_order_item, parent, false));
}
@Override
public void onBindViewHolder(OrderViewHolder holder, int position) {
holder.renderView(orders.get(position));
}
@Override
public int getItemCount() {
return orders.size() == 0 ? 0 : orders.size();
}
}

View File

@ -1,35 +0,0 @@
package me.gilo.wc.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.MenuViewHolder;
import me.gilo.wc.adapter.viewholder.ProductViewHolder;
import me.gilo.woodroid.models.Product;
import java.util.List;
public class ProductAdapter extends RecyclerView.Adapter<ProductViewHolder> {
private List<Product> products;
public ProductAdapter(List<Product> products) {
this.products = products;
}
@Override
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ProductViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_product_item, parent, false));
}
@Override
public void onBindViewHolder(ProductViewHolder holder, int position) {
holder.renderView(products.get(position));
}
@Override
public int getItemCount() {
return products.size() == 0 ? 0 : products.size();
}
}

View File

@ -1,36 +0,0 @@
package me.gilo.wc.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import me.gilo.wc.R;
import me.gilo.wc.adapter.viewholder.ProductReviewViewHolder;
import me.gilo.wc.adapter.viewholder.ProductViewHolder;
import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.ProductReview;
import java.util.List;
public class ProductReviewAdapter extends RecyclerView.Adapter<ProductReviewViewHolder> {
private List<ProductReview> reviews;
public ProductReviewAdapter(List<ProductReview> reviews) {
this.reviews = reviews;
}
@Override
public ProductReviewViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ProductReviewViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_product_review, parent, false));
}
@Override
public void onBindViewHolder(ProductReviewViewHolder holder, int position) {
holder.renderView(reviews.get(position));
}
@Override
public int getItemCount() {
return reviews.size() == 0 ? 0 : reviews.size();
}
}

View File

@ -1,24 +0,0 @@
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.TextView
import me.gilo.wc.R
import me.gilo.wc.ui.product.ShopActivity
import me.gilo.woodroid.models.Category
import me.gilo.woodroid.models.Order
class OrderViewHolder(val context: Context, itemView: View) :
RecyclerView.ViewHolder(itemView) {
fun renderView(order: Order) {
val tvTitle = itemView.findViewById<TextView>(R.id.tvTitle)
tvTitle.text = order.orderNumber
}
}

View File

@ -1,25 +0,0 @@
package me.gilo.wc.common;
import android.arch.lifecycle.LiveData;
import android.support.annotation.NonNull;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
public final class CompletionGenericLiveData<T> extends LiveData<Resource<T>> implements OnCompleteListener<T> {
public CompletionGenericLiveData() {
setValue(new Resource<>(Status.LOADING));
}
@Override
public final void onComplete(@NonNull Task<T> task) {
if (task.isSuccessful()) {
setValue(new Resource<T>(task.getResult()));
} else {
setValue(new Resource<>(task.getException()));
}
}
}

View File

@ -1,20 +0,0 @@
package me.gilo.wc.common;
public class NetworkException extends Exception{
public NetworkException() {
super();
}
public NetworkException(String message) {
super(message);
}
public NetworkException(String message, Throwable cause) {
super(message, cause);
}
public NetworkException(Throwable cause) {
super(cause);
}
}

View File

@ -1,58 +0,0 @@
package me.gilo.wc.di;
import dagger.Module;
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.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.product.CartActivity;
import me.gilo.wc.ui.product.ProductActivity;
import me.gilo.wc.ui.product.ShopActivity;
@Module
abstract class ActivitiesModule {
@ContributesAndroidInjector
abstract MainActivity contributesMainActivity();
@ContributesAndroidInjector
abstract ShopActivity contributesShopActivity();
@ContributesAndroidInjector
abstract ProductActivity contributesProductActivity();
@ContributesAndroidInjector
abstract HomeActivity contributesHomeActivity();
@ContributesAndroidInjector
abstract SignInActivity contributesSignInActivity();
@ContributesAndroidInjector
abstract SignUpActivity contributesSignUpActivity();
@ContributesAndroidInjector
abstract BasicCustomerDetailsActivity contributesBasicCustomerDetailsActivity();
@ContributesAndroidInjector
abstract BillingAddressActivity contributesBillingAddressActivity();
@ContributesAndroidInjector
abstract ShippingAddressActivity contributesShippingAddressActivity();
@ContributesAndroidInjector
abstract CartActivity contributesCartActivity();
@ContributesAndroidInjector
abstract ProfileActivity contributesProfileActivity();
@ContributesAndroidInjector
abstract AnonymousSignInActivity contributesAnonymousSignInActivity();
}

View File

@ -1,25 +0,0 @@
package me.gilo.wc.di;
import dagger.Component;
import dagger.android.AndroidInjector;
import dagger.android.DaggerApplication;
import dagger.android.support.AndroidSupportInjectionModule;
import me.gilo.wc.WcApp;
import javax.inject.Singleton;
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
ViewModelModule.class,
FirebaseModule.class,
ActivitiesModule.class,
AppModule.class
})
interface AppComponent extends AndroidInjector<DaggerApplication> {
void inject(WcApp app);
}

View File

@ -1,38 +0,0 @@
package me.gilo.wc.di;
import dagger.Module;
import dagger.Provides;
import me.gilo.wc.WcApp;
import me.gilo.woodroid.Woocommerce;
import javax.inject.Singleton;
@Module
public class AppModule {
WcApp app;
void AppModule(WcApp application) {
app = application;
}
@Provides
@Singleton
WcApp providesApplication() {
return app;
}
@Provides
@Singleton
Woocommerce providesWoocommerce() {
Woocommerce woocommerce = Woocommerce.Builder()
.setSiteUrl("http://157.230.131.179")
.setApiVersion(Woocommerce.API_V3)
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
.build();
return woocommerce;
}
}

View File

@ -1,46 +0,0 @@
package me.gilo.wc.di;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import dagger.Module;
import dagger.Provides;
import javax.inject.Named;
import javax.inject.Singleton;
@Module
class FirebaseModule {
@Singleton
@Provides
FirebaseFirestore providesFirestore() {
FirebaseFirestore db = FirebaseFirestore.getInstance();
return db;
}
@Singleton
@Provides
@Named("storage")
StorageReference providesStorage() {
return FirebaseStorage.getInstance().getReference();
}
@Singleton
@Provides
@Named("users")
CollectionReference providesUsers() {
return getFirestoreInstance().collection("users");
}
FirebaseFirestore getFirestoreInstance(){
FirebaseFirestore db = FirebaseFirestore.getInstance();
return db;
}
}

View File

@ -1,58 +0,0 @@
package me.gilo.wc.di;
import android.arch.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProvider;
import com.google.firebase.firestore.CollectionReference;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import me.gilo.wc.utils.ViewModelFactory;
import me.gilo.wc.viewmodels.*;
import javax.inject.Named;
import javax.inject.Singleton;
@SuppressWarnings("WeakerAccess")
@Module
public abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(UserViewModel.class)
abstract ViewModel bindUserViewModel(UserViewModel viewModel);
@Binds
@IntoMap
@ViewModelKey(ProductViewModel.class)
abstract ViewModel bindProductViewModel(ProductViewModel viewModel);
@Binds
@IntoMap
@ViewModelKey(CategoryViewModel.class)
abstract ViewModel bindCategoryViewModel(CategoryViewModel viewModel);
@Binds
@IntoMap
@ViewModelKey(CustomerViewModel.class)
abstract ViewModel bindCustomerViewModel(CustomerViewModel viewModel);
@Binds
@IntoMap
@ViewModelKey(CartViewModel.class)
abstract ViewModel bindCartViewModel(CartViewModel viewModel);
@Binds
@IntoMap
@ViewModelKey(ReviewViewModel.class)
abstract ViewModel bindReviewViewModel(ReviewViewModel viewModel);
@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(ViewModelFactory factory);
}

View File

@ -1,113 +0,0 @@
package me.gilo.wc.repo;
import android.arch.lifecycle.Observer;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.util.Log;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.*;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import me.gilo.wc.common.CompletionGenericLiveData;
import me.gilo.wc.common.QueryLiveData;
import me.gilo.wc.common.WooLiveData;
import me.gilo.wc.models.CartLineItem;
import me.gilo.wc.utils.AppUtils;
import me.gilo.woodroid.Woocommerce;
import me.gilo.woodroid.models.LineItem;
import me.gilo.woodroid.models.Product;
import javax.inject.Inject;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CartRepository {
@Inject
Woocommerce woocommerce;
private final CollectionReference cart;
@Inject
public CartRepository() {
this.cart = FirebaseFirestore.getInstance()
.collection("users")
.document(FirebaseAuth.getInstance().getCurrentUser().getUid())
.collection("cart");
}
public QueryLiveData<CartLineItem> cart() {
return new QueryLiveData<>(cart, CartLineItem.class);
}
public CompletionGenericLiveData<Void> deleteItem(CartLineItem cartLineItem) {
final CompletionGenericLiveData<Void> completion = new CompletionGenericLiveData();
cart.document(cartLineItem.getId()).delete().addOnCompleteListener(completion);
return completion;
}
public CompletionGenericLiveData<Void> setQuantity(CartLineItem cartLineItem, int quantity) {
final CompletionGenericLiveData<Void> completion = new CompletionGenericLiveData();
cartLineItem.setQuantity(quantity);
cart.document(cartLineItem.getId()).set(cartLineItem).addOnCompleteListener(completion);
return completion;
}
public CompletionGenericLiveData<Void> deleteItems() {
final CompletionGenericLiveData<Void> completion = new CompletionGenericLiveData();
deleteCartItems().addOnCompleteListener(completion);
return completion;
}
private Task<Void> deleteCartItems() {
return cart.getFirestore().runTransaction(transaction -> {
cart.get().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
cart.document(document.getId()).delete();
}
} else {
}
});
return null;
});
}
public CompletionGenericLiveData<DocumentReference> addToCart(Product product) {
final CompletionGenericLiveData<DocumentReference> completion = new CompletionGenericLiveData();
CartLineItem lineItem = new CartLineItem();
lineItem.setProductId(product.getId());
lineItem.setProduct(product);
lineItem.setQuantity(1);
cart.add(lineItem).addOnCompleteListener(completion);
return completion;
}
public WooLiveData<Map<String, LineItem>> cart(Context context) {
final WooLiveData<Map<String, LineItem>> callBack = new WooLiveData();
woocommerce.CartRepository(context).cart().enqueue(callBack);
return callBack;
}
}

View File

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

View File

@ -1,83 +0,0 @@
package me.gilo.wc.repo;
import com.google.firebase.auth.FirebaseAuth;
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<List<Customer>> currentCustomer() {
final WooLiveData<List<Customer>> callBack = new WooLiveData();
CustomerFilter customerFilter = new CustomerFilter();
customerFilter.setEmail(FirebaseAuth.getInstance().getCurrentUser().getEmail());
woocommerce.CustomerRepository().customers(customerFilter).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

@ -1,111 +0,0 @@
package me.gilo.wc.repo;
import android.support.annotation.NonNull;
import android.util.Log;
import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import me.gilo.wc.models.Identifiable;
import me.gilo.wc.models.Repository;
/**
* Manages data access for Firebase
*/
public class FirebaseRepository<TEntity extends Identifiable<String>> implements Repository<TEntity, String> {
private static final String TAG = "FirebaseRepository";
private final Class<TEntity> entityClass;
private final CollectionReference collectionReference;
private final String collectionName;
public FirebaseRepository(Class<TEntity> entityClass, String collectionName) {
this.collectionName = collectionName;
this.entityClass = entityClass;
FirebaseFirestore db = FirebaseFirestore.getInstance();
this.collectionReference = db.collection(this.collectionName);
}
@Override
public Task<Boolean> exists(final String documentName) {
DocumentReference documentReference = collectionReference.document(documentName);
Log.i(TAG, "Checking existence of '" + documentName + "' in '" + collectionName + "'.");
return documentReference.get().continueWith(new Continuation<DocumentSnapshot, Boolean>() {
@Override
public Boolean then(@NonNull Task<DocumentSnapshot> task) {
Log.d(TAG,"Checking if '" + documentName + "' exists in '" + collectionName +"'.");
return task.getResult().exists();
}
});
}
@Override
public Task<TEntity> get(String id) {
final String documentName = id;
DocumentReference documentReference = collectionReference.document(documentName);
Log.i(TAG, "Getting '" + documentName + "' in '" + collectionName + "'.");
return documentReference.get().continueWith(new Continuation<DocumentSnapshot, TEntity>() {
@Override
public TEntity then(@NonNull Task<DocumentSnapshot> task) throws Exception {
DocumentSnapshot documentSnapshot = task.getResult();
if (documentSnapshot.exists()) {
return documentSnapshot.toObject(entityClass);
} else {
Log.d(TAG, "Document '" + documentName + "' does not exist in '" + collectionName + "'.");
return entityClass.newInstance();
}
}
});
}
@Override
public Task<Void> create(TEntity entity) {
final String documentName = entity.getEntityKey();
DocumentReference documentReference = collectionReference.document(documentName);
Log.i(TAG, "Creating '" + documentName + "' in '" + collectionName + "'.");
return documentReference.set(entity).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "There was an error creating '" + documentName + "' in '" + collectionName + "'!", e);
}
});
}
@Override
public Task<Void> update(TEntity entity) {
final String documentName = entity.getEntityKey();
DocumentReference documentReference = collectionReference.document(documentName);
Log.i(TAG, "Updating '" + documentName + "' in '" + collectionName + "'.");
return documentReference.set(entity).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "There was an error updating '" + documentName + "' in '" + collectionName + "'.", e);
}
});
}
@Override
public Task<Void> delete(final String documentName) {
DocumentReference documentReference = collectionReference.document(documentName);
Log.i(TAG, "Deleting '" + documentName + "' in '" + collectionName + "'.");
return documentReference.delete().addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "There was an error deleting '" + documentName + "' in '" + collectionName + "'.", e);
}
});
}
}

View File

@ -1,50 +0,0 @@
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 android.widget.Toast
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))
}
fun showLoading() {
showLoading("Please wait", "This will only take a second")
}
fun showLoading(title: String, message: String) {
val manager = supportFragmentManager
progressDialog = ProgressDialogFragment.newInstance(title, message)
progressDialog.isCancelable = false
progressDialog.show(manager, "progress")
}
fun stopShowingLoading() {
progressDialog.dismiss()
}
fun toast(text : String){
Toast.makeText(baseContext, text, Toast.LENGTH_LONG).show()
}
}

View File

@ -1,70 +0,0 @@
package me.gilo.wc.ui.onboarding
import android.arch.lifecycle.Observer
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.widget.Toast
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.wc.R
import kotlinx.android.synthetic.main.activity_anonymous_sign_in.*
import kotlinx.android.synthetic.main.content_sign_in.*
import me.gilo.raison.ui.user.onboarding.SignUpActivity
import me.gilo.wc.common.BaseActivity
import me.gilo.wc.common.Status
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.wc.viewmodels.UserViewModel
import java.util.regex.Matcher
import java.util.regex.Pattern
class AnonymousSignInActivity : WooDroidActivity<UserViewModel>() {
override lateinit var viewModel : UserViewModel
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_anonymous_sign_in)
viewModel = getViewModel(UserViewModel::class.java)
anonymousSignIn()
}
private fun anonymousSignIn() {
viewModel.anonymousSignIn().observe(this, Observer {
response->
when (response!!.status()){
Status.LOADING ->{
showLoading("Setting you up with an account", "This will only take a short while")
}
Status.SUCCESS ->{
stopShowingLoading()
startActivity(Intent(baseContext, HomeActivity::class.java))
}
Status.ERROR ->{
stopShowingLoading()
Toast.makeText(baseContext, "Something went wrong", Toast.LENGTH_LONG).show()
}
Status.EMPTY ->{
stopShowingLoading()
}
}
})
}
}

View File

@ -1,19 +0,0 @@
package me.gilo.wc.ui.order
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import me.gilo.wc.R
import kotlinx.android.synthetic.main.activity_my_orders.*
class MyOrdersActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my_orders)
setSupportActionBar(toolbar)
}
}

View File

@ -1,56 +0,0 @@
package me.gilo.wc.viewmodels;
import android.arch.lifecycle.ViewModel;
import android.content.Context;
import com.google.firebase.firestore.DocumentReference;
import me.gilo.wc.common.CompletionGenericLiveData;
import me.gilo.wc.common.QueryLiveData;
import me.gilo.wc.common.WooLiveData;
import me.gilo.wc.models.CartLineItem;
import me.gilo.wc.repo.CartRepository;
import me.gilo.wc.repo.OrderRepository;
import me.gilo.wc.repo.ProductRepository;
import me.gilo.woodroid.models.LineItem;
import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.ProductReview;
import me.gilo.woodroid.models.filters.ProductFilter;
import javax.inject.Inject;
import java.util.List;
import java.util.Map;
public final class CartViewModel extends ViewModel {
private final CartRepository cartRepository;
@Inject
CartViewModel(CartRepository cartRepository) {
this.cartRepository = cartRepository;
}
public CompletionGenericLiveData<DocumentReference> addToCart(Product product) {
return cartRepository.addToCart(product);
}
public QueryLiveData<CartLineItem> cart() {
return cartRepository.cart();
}
public CompletionGenericLiveData<Void> deleteItem(CartLineItem cartLineItem) {
return cartRepository.deleteItem(cartLineItem);
}
public CompletionGenericLiveData<Void> deleteAllCartItems() {
return cartRepository.deleteItems();
}
public CompletionGenericLiveData<Void> setQuantity(CartLineItem cartLineItem, int quantity) {
return cartRepository.setQuantity(cartLineItem, quantity);
}
public WooLiveData<Map<String, LineItem>> cart(Context context) {
return cartRepository.cart(context);
}
}

View File

@ -0,0 +1,16 @@
package me.gilo.woodroid.app;
public class Config {
public static String CURRENCY_SYMBOL = "Ksh.";
public static String siteUrl = "https://gilo.me/store"; //sometimes you need to append /index.php at the end
public static String consumerKey = "ck_4ff858c97e1ed097cc24cb95593b2bcc45e835d5";
public static String consumerSecret = "cs_24865d302c443dec4a1391e5d2a438ba46e95cb6";
//sorry guys :( someday I am gonna add live and debug to have this stored somewhere
//for now commenting will do
// public static String siteUrl = "http://192.168.100.61/shop/index.php";
// public static String consumerKey = "ck_da34628a4a69128001876492b842be4cd3c76bf8";
// public static String consumerSecret = "cs_c3c70248288a60bc21a0cddc81acdc018df1632d";
}

View File

@ -1,33 +1,27 @@
package me.gilo.wc
package me.gilo.woodroid.app
import android.content.Intent
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import androidx.appcompat.app.AppCompatActivity
import android.util.Log
import com.google.firebase.auth.FirebaseAuth
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.customer.BillingAddressActivity
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.product.ProductActivity
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.ui.home.HomeActivity
import me.gilo.woodroid.app.ui.onboarding.AnonymousSignInActivity
import me.gilo.woodroid.app.ui.order.MyOrdersActivity
class MainActivity : AppCompatActivity() {
val TAG = "MainActivity";
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(FirebaseAuth.getInstance().currentUser != null) {
if (FirebaseAuth.getInstance().currentUser != null) {
startActivity(Intent(baseContext, HomeActivity::class.java))
}else{
} else {
startActivity(Intent(baseContext, AnonymousSignInActivity::class.java))
}
finish()
}

View File

@ -0,0 +1,35 @@
package me.gilo.woodroid.app
import dagger.android.AndroidInjector
import dagger.android.DaggerApplication
import io.github.inflationx.calligraphy3.CalligraphyConfig
import io.github.inflationx.calligraphy3.CalligraphyInterceptor
import io.github.inflationx.viewpump.ViewPump
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.di.DaggerAppComponent
class WcApp : DaggerApplication() {
override fun onCreate() {
super.onCreate()
ViewPump.init(
ViewPump.builder()
.addInterceptor(
CalligraphyInterceptor(
CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/GT-America-Regular.otf")
.setFontAttrId(R.attr.fontPath)
.build()
)
)
.build()
)
}
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.create()
}
}

View File

@ -0,0 +1,27 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.CartViewHolder
import me.gilo.woodroid.app.models.CartLineItem
class CartAdapter(private val cartLineItems: List<CartLineItem>) : RecyclerView.Adapter<CartViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartViewHolder {
return CartViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_cart_item, parent, false)
)
}
override fun onBindViewHolder(holder: CartViewHolder, position: Int) {
holder.renderView(cartLineItems[position])
}
override fun getItemCount(): Int {
return if (cartLineItems.isEmpty()) 0 else cartLineItems.size
}
}

View File

@ -0,0 +1,27 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.CategoryViewHolder
import me.gilo.woodroid.models.Category
class CategoryAdapter(private val categories: List<Category>) : RecyclerView.Adapter<CategoryViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryViewHolder {
return CategoryViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_category_item, parent, false)
)
}
override fun onBindViewHolder(holder: CategoryViewHolder, position: Int) {
holder.renderView(categories[position])
}
override fun getItemCount(): Int {
return if (categories.isEmpty()) 0 else categories.size
}
}

View File

@ -0,0 +1,27 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.CouponViewHolder
import me.gilo.woodroid.models.Coupon
class CouponAdapter(private val coupons: List<Coupon>) : RecyclerView.Adapter<CouponViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CouponViewHolder {
return CouponViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_coupon_item, parent, false)
)
}
override fun onBindViewHolder(holder: CouponViewHolder, position: Int) {
holder.renderView(coupons[position])
}
override fun getItemCount(): Int {
return if (coupons.size == 0) 0 else coupons.size
}
}

View File

@ -0,0 +1,27 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.ProductViewHolder
import me.gilo.woodroid.models.Product
class HomeProductAdapter(private val products: List<Product>) : RecyclerView.Adapter<ProductViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
return ProductViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_home_product_item, parent, false)
)
}
override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
holder.renderView(products[position])
}
override fun getItemCount(): Int {
return if (products.isEmpty()) 0 else products.size
}
}

View File

@ -1,14 +1,14 @@
package me.gilo.wc.adapter
package me.gilo.woodroid.app.adapter
import android.content.Context
import android.support.v4.view.PagerAdapter
import androidx.viewpager.widget.PagerAdapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import com.squareup.picasso.Picasso
import me.gilo.wc.R
import me.gilo.woodroid.app.R
import me.gilo.woodroid.models.Image
@ -22,12 +22,10 @@ class ImagePagerAdapter(val context: Context, private val images: List<Image>) :
val ivImage = layout.findViewById<ImageView>(R.id.ivImage)
val image = images[position]
if (image != null) {
Picasso
.with(context)
.load(image!!.src)
.into(ivImage)
}
Picasso
.with(context)
.load(image.src)
.into(ivImage)
collection.addView(layout)
return layout

View File

@ -0,0 +1,27 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.ProductViewHolder
import me.gilo.woodroid.models.Product
class ListAdapter(private val products: List<Product>) : RecyclerView.Adapter<ProductViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
return ProductViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_product_item, parent, false)
)
}
override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
holder.renderView(products[position])
}
override fun getItemCount(): Int {
return if (products.isEmpty()) 0 else products.size
}
}

View File

@ -0,0 +1,26 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.MenuViewHolder
class MenuAdapter(private val titles: List<String>) : RecyclerView.Adapter<MenuViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MenuViewHolder {
return MenuViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_menu_item, parent, false)
)
}
override fun onBindViewHolder(holder: MenuViewHolder, position: Int) {
holder.renderView(titles[position])
}
override fun getItemCount(): Int {
return if (titles.isEmpty()) 0 else titles.size
}
}

View File

@ -0,0 +1,27 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.OrderViewHolder
import me.gilo.woodroid.models.Order
class OrderAdapter(private val orders: List<Order>) : RecyclerView.Adapter<OrderViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderViewHolder {
return OrderViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_order_item, parent, false)
)
}
override fun onBindViewHolder(holder: OrderViewHolder, position: Int) {
holder.renderView(orders[position])
}
override fun getItemCount(): Int {
return if (orders.isEmpty()) 0 else orders.size
}
}

View File

@ -0,0 +1,27 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.ProductViewHolder
import me.gilo.woodroid.models.Product
class ProductAdapter(private val products: List<Product>) : RecyclerView.Adapter<ProductViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
return ProductViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_product_item, parent, false)
)
}
override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
holder.renderView(products[position])
}
override fun getItemCount(): Int {
return if (products.isEmpty()) 0 else products.size
}
}

View File

@ -0,0 +1,27 @@
package me.gilo.woodroid.app.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.viewholder.ProductReviewViewHolder
import me.gilo.woodroid.models.ProductReview
class ProductReviewAdapter(private val reviews: List<ProductReview>) : RecyclerView.Adapter<ProductReviewViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductReviewViewHolder {
return ProductReviewViewHolder(
parent.context,
LayoutInflater.from(parent.context).inflate(R.layout.single_product_review, parent, false)
)
}
override fun onBindViewHolder(holder: ProductReviewViewHolder, position: Int) {
holder.renderView(reviews[position])
}
override fun getItemCount(): Int {
return if (reviews.isEmpty()) 0 else reviews.size
}
}

View File

@ -1,27 +1,19 @@
package me.gilo.wc.adapter.viewholder
package me.gilo.woodroid.app.adapter.viewholder
import android.content.Context
import android.content.Intent
import android.support.v7.widget.RecyclerView
import androidx.recyclerview.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.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.events.AddQuantityEvent
import me.gilo.wc.events.LessQuantityEvent
import me.gilo.wc.events.ProductEvent
import me.gilo.wc.models.CartLineItem
import me.gilo.wc.ui.coupon.CouponActivity
import me.gilo.wc.ui.product.ProductActivity
import me.gilo.woodroid.models.CartItem
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.events.AddQuantityEvent
import me.gilo.woodroid.app.events.LessQuantityEvent
import me.gilo.woodroid.app.models.CartLineItem
import me.gilo.woodroid.app.ui.product.ProductActivity
import org.greenrobot.eventbus.EventBus

View File

@ -1,13 +1,12 @@
package me.gilo.wc.adapter.viewholder
package me.gilo.woodroid.app.adapter.viewholder
import android.content.Context
import android.content.Intent
import android.support.v7.widget.RecyclerView
import android.text.Html
import androidx.recyclerview.widget.RecyclerView
import android.view.View
import android.widget.TextView
import me.gilo.wc.R
import me.gilo.wc.ui.product.ShopActivity
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.ui.product.ShopActivity
import me.gilo.woodroid.models.Category
class CategoryViewHolder(val context: Context, itemView: View) :

View File

@ -1,13 +1,13 @@
package me.gilo.wc.adapter.viewholder
package me.gilo.woodroid.app.adapter.viewholder
import android.content.Context
import android.content.Intent
import android.support.v7.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView
import android.text.Html
import android.view.View
import android.widget.TextView
import me.gilo.wc.R
import me.gilo.wc.ui.coupon.CouponActivity
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.ui.coupon.CouponActivity
import me.gilo.woodroid.models.Coupon
class CouponViewHolder(val context: Context, itemView: View) :
@ -17,7 +17,7 @@ class CouponViewHolder(val context: Context, itemView: View) :
val tvTitle = itemView.findViewById<TextView>(R.id.tvTitle)
val tvDescription = itemView.findViewById<TextView>(R.id.tvDescription)
tvTitle.text = coupon.code.toUpperCase()
tvTitle.text = coupon.code?.toUpperCase()
tvDescription.text = Html.fromHtml(coupon.description)
itemView.setOnClickListener{

View File

@ -1,13 +1,13 @@
package me.gilo.wc.adapter.viewholder;
package me.gilo.woodroid.app.adapter.viewholder;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import me.gilo.wc.R;
import me.gilo.wc.ui.coupon.CouponsActivity;
import me.gilo.wc.ui.product.ShopActivity;
import me.gilo.woodroid.app.R;
import me.gilo.woodroid.app.ui.coupon.CouponsActivity;
import me.gilo.woodroid.app.ui.product.ShopActivity;
public class MenuViewHolder extends RecyclerView.ViewHolder {

View File

@ -0,0 +1,51 @@
package me.gilo.woodroid.app.adapter.viewholder
import android.content.Context
import android.content.Intent
import androidx.recyclerview.widget.RecyclerView
import android.text.SpannableString
import android.view.View
import android.widget.TextView
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.ui.order.OrderActivity
import me.gilo.woodroid.app.utils.DateUtils
import me.gilo.woodroid.models.Order
class OrderViewHolder(val context: Context, itemView: View) :
RecyclerView.ViewHolder(itemView) {
fun renderView(order: Order) {
val tvTitle = itemView.findViewById<TextView>(R.id.tvTitle)
val tvDescription = itemView.findViewById<TextView>(R.id.tvDescription)
val tvPrice = itemView.findViewById<TextView>(R.id.tvPrice)
val tvStatus = itemView.findViewById<TextView>(R.id.tvStatus)
val tvDate = itemView.findViewById<TextView>(R.id.tvDate)
tvTitle.text = "#" + order.orderNumber
tvStatus.text = order.status
tvDate.text = DateUtils.getDateString_shortAndSmart(order.dateCreated)
tvPrice.text = SpannableString("Ksh${order.total}")
var description = ""
for (lineItem in order.lineItems){
description += lineItem.name + "(" + lineItem.quantity + "), "
}
tvDescription.text = description
itemView.setOnClickListener{
var intent = Intent(context, OrderActivity::class.java)
intent.putExtra("orderId", order.id)
context.startActivity(intent)
}
}
}

View File

@ -1,18 +1,15 @@
package me.gilo.wc.adapter.viewholder
package me.gilo.woodroid.app.adapter.viewholder
import android.content.Context
import android.content.Intent
import android.support.v7.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView
import android.text.Html
import android.view.View
import android.widget.ImageView
import android.widget.RatingBar
import android.widget.TextView
import com.squareup.picasso.Picasso
import me.gilo.wc.R
import me.gilo.wc.ui.product.ShopActivity
import me.gilo.wc.utils.DateUtils
import me.gilo.woodroid.models.Category
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.utils.DateUtils
import me.gilo.woodroid.models.ProductReview
class ProductReviewViewHolder(val context: Context, itemView: View) :

View File

@ -1,22 +1,17 @@
package me.gilo.wc.adapter.viewholder
package me.gilo.woodroid.app.adapter.viewholder
import android.content.Context
import android.content.Intent
import android.support.v7.widget.RecyclerView
import androidx.recyclerview.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.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
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.ui.product.ProductActivity
import me.gilo.woodroid.models.Product
class ProductViewHolder(val context: Context, itemView: View) :

View File

@ -1,13 +1,12 @@
package me.gilo.wc.common;
package me.gilo.woodroid.app.common;
import android.annotation.SuppressLint;
import android.arch.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProvider;
import android.arch.lifecycle.ViewModelProviders;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import androidx.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;

View File

@ -1,7 +1,7 @@
package me.gilo.wc.common;
package me.gilo.woodroid.app.common;
import android.arch.lifecycle.LiveData;
import android.support.annotation.NonNull;
import androidx.lifecycle.LiveData;
import androidx.annotation.NonNull;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.DocumentReference;

View File

@ -0,0 +1,21 @@
package me.gilo.woodroid.app.common
import androidx.lifecycle.LiveData
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
class CompletionGenericLiveData<T> : LiveData<Resource<T>>(), OnCompleteListener<T> {
init {
value = Resource(Status.LOADING)
}
override fun onComplete(task: Task<T>) {
if (task.isSuccessful) {
setValue(Resource(task.result!!))
} else {
setValue(Resource(task.exception!!))
}
}
}

View File

@ -1,7 +1,7 @@
package me.gilo.wc.common;
package me.gilo.woodroid.app.common;
import android.arch.lifecycle.LiveData;
import android.support.annotation.NonNull;
import androidx.lifecycle.LiveData;
import androidx.annotation.NonNull;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;

View File

@ -1,6 +1,6 @@
package me.gilo.wc.common;
package me.gilo.woodroid.app.common;
import android.arch.lifecycle.LiveData;
import androidx.lifecycle.LiveData;
import com.google.firebase.firestore.*;

View File

@ -1,4 +1,4 @@
package me.gilo.woodroid.callback;
package me.gilo.woodroid.app.common;
public class NetworkException extends Exception{

View File

@ -1,6 +1,6 @@
package me.gilo.wc.common;
package me.gilo.woodroid.app.common;
import android.support.v7.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView;
/**
* Created by amrro <amr.elghobary@gmail.com> on 9/15/17.

View File

@ -1,9 +1,9 @@
package me.gilo.wc.common;
package me.gilo.woodroid.app.common;
import android.arch.lifecycle.LiveData;
import android.support.annotation.NonNull;
import androidx.lifecycle.LiveData;
import androidx.annotation.NonNull;
import com.google.firebase.firestore.*;
import me.gilo.wc.models.Model;
import me.gilo.woodroid.app.models.Model;
import java.util.ArrayList;

View File

@ -1,7 +1,7 @@
package me.gilo.wc.common;
package me.gilo.woodroid.app.common;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.List;

View File

@ -1,4 +1,4 @@
package me.gilo.woodroid.callback;
package me.gilo.woodroid.app.common;
public enum Status {
EMPTY,

View File

@ -1,6 +1,6 @@
package me.gilo.wc.common;
package me.gilo.woodroid.app.common;
import android.arch.lifecycle.LiveData;
import androidx.lifecycle.LiveData;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

View File

@ -0,0 +1,65 @@
package me.gilo.woodroid.app.di
import dagger.Module
import dagger.android.ContributesAndroidInjector
import me.gilo.raison.ui.user.onboarding.SignInActivity
import me.gilo.raison.ui.user.onboarding.SignUpActivity
import me.gilo.woodroid.app.MainActivity
import me.gilo.woodroid.app.ui.customer.BasicCustomerDetailsActivity
import me.gilo.woodroid.app.ui.customer.BillingAddressActivity
import me.gilo.woodroid.app.ui.customer.ProfileActivity
import me.gilo.woodroid.app.ui.customer.ShippingAddressActivity
import me.gilo.woodroid.app.ui.home.HomeActivity
import me.gilo.woodroid.app.ui.onboarding.AnonymousSignInActivity
import me.gilo.woodroid.app.ui.order.MyOrdersActivity
import me.gilo.woodroid.app.ui.order.OrderActivity
import me.gilo.woodroid.app.ui.product.CartActivity
import me.gilo.woodroid.app.ui.product.ProductActivity
import me.gilo.woodroid.app.ui.product.ShopActivity
@Module
internal abstract class ActivitiesModule {
@ContributesAndroidInjector
internal abstract fun contributesMainActivity(): MainActivity
@ContributesAndroidInjector
internal abstract fun contributesShopActivity(): ShopActivity
@ContributesAndroidInjector
internal abstract fun contributesProductActivity(): ProductActivity
@ContributesAndroidInjector
internal abstract fun contributesHomeActivity(): HomeActivity
@ContributesAndroidInjector
internal abstract fun contributesSignInActivity(): SignInActivity
@ContributesAndroidInjector
internal abstract fun contributesSignUpActivity(): SignUpActivity
@ContributesAndroidInjector
internal abstract fun contributesBasicCustomerDetailsActivity(): BasicCustomerDetailsActivity
@ContributesAndroidInjector
internal abstract fun contributesBillingAddressActivity(): BillingAddressActivity
@ContributesAndroidInjector
internal abstract fun contributesShippingAddressActivity(): ShippingAddressActivity
@ContributesAndroidInjector
internal abstract fun contributesCartActivity(): CartActivity
@ContributesAndroidInjector
internal abstract fun contributesProfileActivity(): ProfileActivity
@ContributesAndroidInjector
internal abstract fun contributesAnonymousSignInActivity(): AnonymousSignInActivity
@ContributesAndroidInjector
internal abstract fun contributesMyOrdersActivity(): MyOrdersActivity
@ContributesAndroidInjector
internal abstract fun contributesOrderActivity(): OrderActivity
}

View File

@ -0,0 +1,19 @@
package me.gilo.woodroid.app.di
import dagger.Component
import dagger.android.AndroidInjector
import dagger.android.DaggerApplication
import dagger.android.support.AndroidSupportInjectionModule
import me.gilo.woodroid.app.WcApp
import javax.inject.Singleton
@Singleton
@Component(modules = [AndroidSupportInjectionModule::class, ViewModelModule::class, FirebaseModule::class, ActivitiesModule::class, AppModule::class])
internal interface AppComponent : AndroidInjector<DaggerApplication> {
fun inject(app: WcApp)
}

View File

@ -0,0 +1,46 @@
package me.gilo.woodroid.app.di
import dagger.Module
import dagger.Provides
import me.gilo.woodroid.app.Config
import me.gilo.woodroid.app.WcApp
import me.gilo.woodroid.Woocommerce
import me.gilo.woodroid.offlinecart.repo.RoomCartRepository
import javax.inject.Singleton
@Module
class AppModule {
internal var app: WcApp? = null
internal fun AppModule(application: WcApp) {
app = application
}
@Provides
@Singleton
internal fun providesApplication(): WcApp {
return app!!
}
@Provides
@Singleton
internal fun providesWoocommerce(): Woocommerce {
return Woocommerce.Builder()
.setSiteUrl(Config.siteUrl)
.setApiVersion(Woocommerce.API_V3)
.setConsumerKey(Config.consumerKey)
.setConsumerSecret(Config.consumerSecret)
.build()
}
@Provides
@Singleton
internal fun providesRoomCartRepository(): RoomCartRepository = RoomCartRepository(app!!.baseContext)
}

View File

@ -0,0 +1,41 @@
package me.gilo.woodroid.app.di
import com.google.firebase.firestore.CollectionReference
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StorageReference
import dagger.Module
import dagger.Provides
import javax.inject.Named
import javax.inject.Singleton
@Module
internal class FirebaseModule {
private val firestoreInstance: FirebaseFirestore
get() = FirebaseFirestore.getInstance()
@Singleton
@Provides
fun providesFirestore(): FirebaseFirestore {
return FirebaseFirestore.getInstance()
}
@Singleton
@Provides
@Named("storage")
fun providesStorage(): StorageReference {
return FirebaseStorage.getInstance().reference
}
@Singleton
@Provides
@Named("users")
fun providesUsers(): CollectionReference {
return firestoreInstance.collection("users")
}
}

View File

@ -1,6 +1,6 @@
package me.gilo.wc.di;
package me.gilo.woodroid.app.di;
import android.arch.lifecycle.ViewModel;
import androidx.lifecycle.ViewModel;
import dagger.MapKey;
import java.lang.annotation.*;

View File

@ -0,0 +1,55 @@
package me.gilo.woodroid.app.di
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
import me.gilo.woodroid.app.utils.ViewModelFactory
import me.gilo.woodroid.app.viewmodels.*
@Module
abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(UserViewModel::class)
internal abstract fun bindUserViewModel(viewModel: UserViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(ProductViewModel::class)
internal abstract fun bindProductViewModel(viewModel: ProductViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(CategoryViewModel::class)
internal abstract fun bindCategoryViewModel(viewModel: CategoryViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(CustomerViewModel::class)
internal abstract fun bindCustomerViewModel(viewModel: CustomerViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(CartViewModel::class)
internal abstract fun bindCartViewModel(viewModel: CartViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(OrderViewModel::class)
internal abstract fun bindOrderViewModel(viewModel: OrderViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(ReviewViewModel::class)
internal abstract fun bindReviewViewModel(viewModel: ReviewViewModel): ViewModel
@Binds
internal abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
}

View File

@ -1,7 +1,6 @@
package me.gilo.wc.events;
package me.gilo.woodroid.app.events;
import me.gilo.wc.models.CartLineItem;
import me.gilo.woodroid.models.ProductReview;
import me.gilo.woodroid.app.models.CartLineItem;
public class AddQuantityEvent {

View File

@ -1,7 +1,6 @@
package me.gilo.wc.events;
package me.gilo.woodroid.app.events;
import me.gilo.wc.models.CartLineItem;
import me.gilo.woodroid.models.ProductReview;
import me.gilo.woodroid.app.models.CartLineItem;
public class LessQuantityEvent {

View File

@ -1,4 +1,4 @@
package me.gilo.wc.events;
package me.gilo.woodroid.app.events;
import me.gilo.woodroid.models.Product;

View File

@ -1,6 +1,5 @@
package me.gilo.wc.events;
package me.gilo.woodroid.app.events;
import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.ProductReview;
public class ReviewEvent {

View File

@ -1,12 +1,6 @@
package me.gilo.wc.models;
import com.google.gson.annotations.SerializedName;
import me.gilo.woodroid.models.Metum;
package me.gilo.woodroid.app.models;
import me.gilo.woodroid.models.Product;
import java.util.ArrayList;
import java.util.List;
public class CartLineItem extends Model{

View File

@ -1,4 +1,4 @@
package me.gilo.wc.models;
package me.gilo.woodroid.app.models;
import com.google.firebase.firestore.Exclude;

View File

@ -1,6 +1,6 @@
package me.gilo.wc.models;
package me.gilo.woodroid.app.models;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.google.firebase.firestore.IgnoreExtraProperties;
import com.google.firebase.firestore.ServerTimestamp;

View File

@ -1,4 +1,4 @@
package me.gilo.wc.models;
package me.gilo.woodroid.app.models;
import com.google.android.gms.tasks.Task;

View File

@ -1,4 +1,4 @@
package me.gilo.wc.models;
package me.gilo.woodroid.app.models;
public class User{
String id;

View File

@ -0,0 +1,77 @@
package me.gilo.woodroid.app.repo
import android.content.Context
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.firestore.CollectionReference
import com.google.firebase.firestore.DocumentReference
import com.google.firebase.firestore.FirebaseFirestore
import me.gilo.woodroid.app.common.CompletionGenericLiveData
import me.gilo.woodroid.app.common.QueryLiveData
import me.gilo.woodroid.app.common.WooLiveData
import me.gilo.woodroid.app.models.CartLineItem
import me.gilo.woodroid.Woocommerce
import me.gilo.woodroid.core.cart.Cart
import me.gilo.woodroid.core.cart.CartItem
import me.gilo.woodroid.models.Product
import me.gilo.woodroid.offlinecart.repo.RoomCartRepository
import javax.inject.Inject
open class CartRepository @Inject
constructor() {
@Inject
lateinit var woocommerce: Woocommerce
private val cart: CollectionReference = FirebaseFirestore.getInstance()
.collection("users")
.document(FirebaseAuth.getInstance().currentUser?.uid ?: "0")
.collection("cart")
fun cart(): QueryLiveData<CartLineItem> {
return QueryLiveData(cart, CartLineItem::class.java)
}
fun deleteItem(cartLineItem: CartLineItem): CompletionGenericLiveData<Void> {
val completion = CompletionGenericLiveData<Void>()
cart.document(cartLineItem.getId()).delete().addOnCompleteListener(completion)
return completion
}
fun setQuantity(cartLineItem: CartLineItem, quantity: Int): CompletionGenericLiveData<Void> {
val completion = CompletionGenericLiveData<Void>()
cartLineItem.setQuantity(quantity)
cart.document(cartLineItem.getId()).set(cartLineItem).addOnCompleteListener(completion)
return completion
}
fun deleteItems(): CompletionGenericLiveData<Void> {
val completion = CompletionGenericLiveData<Void>()
deleteCartItems().addOnCompleteListener(completion)
return completion
}
private fun deleteCartItems(): Task<Void> {
return cart.firestore.runTransaction {
cart.get().addOnCompleteListener { task ->
if (task.isSuccessful) {
for (document in task.result!!) {
cart.document(document.id).delete()
}
} else {
}
}
null
}
}
}

View File

@ -0,0 +1,69 @@
package me.gilo.woodroid.app.repo
import me.gilo.woodroid.app.common.WooLiveData
import me.gilo.woodroid.Woocommerce
import me.gilo.woodroid.models.Category
import me.gilo.woodroid.models.filters.ProductCategoryFilter
import javax.inject.Inject
class CategoryRepository @Inject
constructor() {
@Inject
lateinit var woocommerce: Woocommerce
fun create(category: Category): WooLiveData<Category> {
val callBack = WooLiveData<Category>()
woocommerce.CategoryRepository().create(category).enqueue(callBack)
return callBack
}
fun category(id: Int): WooLiveData<Category> {
val callBack = WooLiveData<Category>()
woocommerce.CategoryRepository().category(id).enqueue(callBack)
return callBack
}
fun categories(): WooLiveData<List<Category>> {
val callBack = WooLiveData<List<Category>>()
woocommerce.CategoryRepository().categories().enqueue(callBack)
return callBack
}
fun categories(productCategoryFilter: ProductCategoryFilter): WooLiveData<List<Category>> {
val callBack = WooLiveData<List<Category>>()
woocommerce.CategoryRepository().categories(productCategoryFilter).enqueue(callBack)
return callBack
}
fun update(id: Int, category: Category): WooLiveData<Category> {
val callBack = WooLiveData<Category>()
woocommerce.CategoryRepository().update(id, category).enqueue(callBack)
return callBack
}
fun delete(id: Int): WooLiveData<Category> {
val callBack = WooLiveData<Category>()
woocommerce.CategoryRepository().delete(id).enqueue(callBack)
return callBack
}
fun delete(id: Int, force: Boolean): WooLiveData<Category> {
val callBack = WooLiveData<Category>()
woocommerce.CategoryRepository().delete(id, force).enqueue(callBack)
return callBack
}
}

View File

@ -0,0 +1,76 @@
package me.gilo.woodroid.app.repo
import com.google.firebase.auth.FirebaseAuth
import me.gilo.woodroid.app.common.WooLiveData
import me.gilo.woodroid.Woocommerce
import me.gilo.woodroid.models.Customer
import me.gilo.woodroid.models.filters.CustomerFilter
import javax.inject.Inject
class CustomerRepository @Inject
constructor() {
@Inject
lateinit var woocommerce: Woocommerce
fun create(customer: Customer): WooLiveData<Customer> {
val callBack = WooLiveData<Customer>()
woocommerce.CustomerRepository().create(customer).enqueue(callBack)
return callBack
}
fun currentCustomer(): WooLiveData<List<Customer>> {
val callBack = WooLiveData<List<Customer>>()
val customerFilter = CustomerFilter()
customerFilter.setEmail(FirebaseAuth.getInstance().currentUser!!.email!!)
woocommerce.CustomerRepository().customers(customerFilter).enqueue(callBack)
return callBack
}
fun customer(id: Int): WooLiveData<Customer> {
val callBack = WooLiveData<Customer>()
woocommerce.CustomerRepository().customer(id).enqueue(callBack)
return callBack
}
fun customers(): WooLiveData<List<Customer>> {
val callBack = WooLiveData<List<Customer>>()
woocommerce.CustomerRepository().customers().enqueue(callBack)
return callBack
}
fun customers(customerFilter: CustomerFilter): WooLiveData<List<Customer>> {
val callBack = WooLiveData<List<Customer>>()
woocommerce.CustomerRepository().customers(customerFilter).enqueue(callBack)
return callBack
}
fun update(id: Int, customer: Customer): WooLiveData<Customer> {
val callBack = WooLiveData<Customer>()
woocommerce.CustomerRepository().update(id, customer).enqueue(callBack)
return callBack
}
fun delete(id: Int): WooLiveData<Customer> {
val callBack = WooLiveData<Customer>()
woocommerce.CustomerRepository().delete(id).enqueue(callBack)
return callBack
}
fun delete(id: Int, force: Boolean): WooLiveData<Customer> {
val callBack = WooLiveData<Customer>()
woocommerce.CustomerRepository().delete(id, force).enqueue(callBack)
return callBack
}
}

View File

@ -0,0 +1,98 @@
package me.gilo.woodroid.app.repo
import android.util.Log
import com.google.android.gms.tasks.Task
import com.google.firebase.firestore.CollectionReference
import com.google.firebase.firestore.FirebaseFirestore
import me.gilo.woodroid.app.models.Identifiable
import me.gilo.woodroid.app.models.Repository
/**
* Manages data access for Firebase
*/
open class FirebaseRepository<TEntity : Identifiable<String>>(
private val entityClass: Class<TEntity>,
private val collectionName: String
) : Repository<TEntity, String> {
private val collectionReference: CollectionReference
init {
val db = FirebaseFirestore.getInstance()
this.collectionReference = db.collection(this.collectionName)
}
override fun exists(documentName: String): Task<Boolean> {
val documentReference = collectionReference.document(documentName)
Log.i(TAG, "Checking existence of '$documentName' in '$collectionName'.")
return documentReference.get().continueWith { task ->
Log.d(TAG, "Checking if '$documentName' exists in '$collectionName'.")
task.result!!.exists()
}
}
override fun get(id: String): Task<TEntity> {
val documentReference = collectionReference.document(id)
Log.i(TAG, "Getting '$id' in '$collectionName'.")
return documentReference.get().continueWith { task ->
val documentSnapshot = task.result
if (documentSnapshot!!.exists()) {
documentSnapshot.toObject(entityClass)
} else {
Log.d(TAG, "Document '$id' does not exist in '$collectionName'.")
entityClass.newInstance()
}
}
}
override fun create(entity: TEntity): Task<Void> {
val documentName = entity.entityKey
val documentReference = collectionReference.document(documentName)
Log.i(TAG, "Creating '$documentName' in '$collectionName'.")
return documentReference.set(entity).addOnFailureListener { e ->
Log.d(
TAG,
"There was an error creating '$documentName' in '$collectionName'!",
e
)
}
}
override fun update(entity: TEntity): Task<Void> {
val documentName = entity.entityKey
val documentReference = collectionReference.document(documentName)
Log.i(TAG, "Updating '$documentName' in '$collectionName'.")
return documentReference.set(entity).addOnFailureListener { e ->
Log.d(
TAG,
"There was an error updating '$documentName' in '$collectionName'.",
e
)
}
}
override fun delete(documentName: String): Task<Void> {
val documentReference = collectionReference.document(documentName)
Log.i(TAG, "Deleting '$documentName' in '$collectionName'.")
return documentReference.delete().addOnFailureListener { e ->
Log.d(
TAG,
"There was an error deleting '$documentName' in '$collectionName'.",
e
)
}
}
companion object {
private val TAG = "FirebaseRepository"
}
}

View File

@ -1,4 +1,4 @@
package me.gilo.wc.repo;
package me.gilo.woodroid.app.repo;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
@ -7,10 +7,10 @@ import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.storage.StorageReference;
import me.gilo.wc.common.CompletionGenericLiveData;
import me.gilo.wc.common.CompletionLiveData;
import me.gilo.wc.common.DocumentLiveData;
import me.gilo.wc.models.User;
import me.gilo.woodroid.app.common.CompletionGenericLiveData;
import me.gilo.woodroid.app.common.CompletionLiveData;
import me.gilo.woodroid.app.common.DocumentLiveData;
import me.gilo.woodroid.app.models.User;
import javax.inject.Inject;
import javax.inject.Named;
@ -38,6 +38,11 @@ public class FirebaseUserRepository extends FirebaseRepository {
}
public void logout() {
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signOut();
}
public CompletionGenericLiveData<AuthResult> anonymousSignIn() {
final CompletionGenericLiveData<AuthResult> completion = new CompletionGenericLiveData();

View File

@ -1,7 +1,7 @@
package me.gilo.wc.repo;
package me.gilo.woodroid.app.repo;
import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.app.common.WooLiveData;
import me.gilo.woodroid.Woocommerce;
import me.gilo.woodroid.models.Order;
import me.gilo.woodroid.models.filters.OrderFilter;
@ -23,7 +23,7 @@ public class OrderRepository {
public WooLiveData<Order> addToCart(int productId) {
final WooLiveData<Order> callBack = new WooLiveData();
woocommerce.OrderRepository().addToCart(productId).enqueue(callBack);
woocommerce.OrderRepository().addToCart(productId, null).enqueue(callBack);
return callBack;
}

View File

@ -1,7 +1,7 @@
package me.gilo.wc.repo;
package me.gilo.woodroid.app.repo;
import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.app.common.WooLiveData;
import me.gilo.woodroid.Woocommerce;
import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.ProductReview;

View File

@ -1,11 +1,9 @@
package me.gilo.wc.repo;
package me.gilo.woodroid.app.repo;
import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.app.common.WooLiveData;
import me.gilo.woodroid.Woocommerce;
import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.ProductReview;
import me.gilo.woodroid.models.filters.ProductFilter;
import me.gilo.woodroid.models.filters.ProductReviewFilter;
import javax.inject.Inject;

View File

@ -1,9 +1,10 @@
package me.gilo.wc.ui
package me.gilo.woodroid.app.ui
import android.content.Context
import android.support.v7.app.AppCompatActivity
import androidx.appcompat.app.AppCompatActivity
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.woodroid.app.Config
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment
import me.gilo.woodroid.Woocommerce
open class BaseActivity : AppCompatActivity() {
@ -11,10 +12,10 @@ open class BaseActivity : AppCompatActivity() {
private lateinit var progressDialog : ProgressDialogFragment
val woocommerce = Woocommerce.Builder()
.setSiteUrl("http://157.230.131.179")
.setSiteUrl(Config.siteUrl)
.setApiVersion(Woocommerce.API_V3)
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
.setConsumerKey(Config.consumerKey)
.setConsumerSecret(Config.consumerSecret)
.build()

View File

@ -1,16 +1,12 @@
package me.gilo.wc.ui
package me.gilo.woodroid.app.ui
import android.app.Activity
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import me.gilo.wc.R
import androidx.recyclerview.widget.LinearLayoutManager
import me.gilo.woodroid.app.R
import kotlinx.android.synthetic.main.activity_menu.*
import kotlinx.android.synthetic.main.content_menu.*
import me.gilo.wc.adapter.MenuAdapter
import me.gilo.woodroid.app.adapter.MenuAdapter
import java.util.ArrayList
class MenuActivity : BaseActivity() {
@ -22,7 +18,11 @@ class MenuActivity : BaseActivity() {
title = "Menu"
val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false)
val layoutManager = LinearLayoutManager(
baseContext,
LinearLayoutManager.VERTICAL,
false
)
rvMenu.layoutManager = layoutManager
rvMenu.isNestedScrollingEnabled = false

View File

@ -0,0 +1,129 @@
package me.gilo.woodroid.app.ui
import androidx.lifecycle.ViewModel
import android.content.Context
import android.content.Intent
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.raison.ui.user.onboarding.SignInActivity
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.common.BaseActivity
import me.gilo.woodroid.app.common.Status
import me.gilo.woodroid.app.ui.product.CartActivity
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment
import me.gilo.woodroid.app.viewmodels.CartViewModel
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))
}
override fun onResume() {
super.onResume()
if(FirebaseAuth.getInstance().currentUser == null){
startActivity(Intent(baseContext, SignInActivity::class.java))
finish()
}
//cart()
}
fun showLoading() {
showLoading("Please wait", "This will only take a second")
}
fun showLoading(title: String, message: String) {
val manager = supportFragmentManager
progressDialog = ProgressDialogFragment.newInstance(title, message)
progressDialog.isCancelable = false
progressDialog.show(manager, "progress")
}
fun stopShowingLoading() {
progressDialog.dismiss()
}
fun toast(text : String){
Toast.makeText(baseContext, text, Toast.LENGTH_LONG).show()
}
var tvCartCounter : TextView? = null
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.product, menu)
val item = menu.findItem(R.id.menu_cart)
val rootView = item.actionView as FrameLayout
tvCartCounter = rootView.findViewById<TextView>(R.id.tvCart_counter)
rootView.setOnClickListener{startActivity(Intent(baseContext, CartActivity::class.java))}
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.menu_cart -> {
true
}
else -> super.onOptionsItemSelected(item)
}
}
open fun cart() {
var viewModel = getViewModel(CartViewModel::class.java)
viewModel.cart().observe(this, androidx.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
}
Status.SUCCESS -> {
for (cartItem in response.data()){
}
if ( response.data().size == 0 && tvCartCounter != null){
tvCartCounter?.visibility = View.GONE
}else{
tvCartCounter?.visibility = View.VISIBLE
tvCartCounter?.text = response.data().size.toString()
}
}
Status.ERROR -> {
}
Status.EMPTY -> {
if ( response.data().size == 0 && tvCartCounter != null){
tvCartCounter?.visibility = View.GONE
}else{
tvCartCounter?.visibility = View.VISIBLE
tvCartCounter?.text = response.data().size.toString()
}
}
}
})
}
}

View File

@ -1,9 +1,8 @@
package me.gilo.wc.ui.checkout
package me.gilo.woodroid.app.ui.checkout
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import me.gilo.wc.R
import androidx.appcompat.app.AppCompatActivity
import me.gilo.woodroid.app.R
import kotlinx.android.synthetic.main.activity_checkout.*
@ -14,10 +13,6 @@ class CheckoutActivity : AppCompatActivity() {
setContentView(R.layout.activity_checkout)
setSupportActionBar(toolbar)
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
}
}

View File

@ -1,10 +1,10 @@
package me.gilo.wc.ui.coupon
package me.gilo.woodroid.app.ui.coupon
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_add_coupon.*
import kotlinx.android.synthetic.main.content_add_coupon.*
import me.gilo.wc.R
import me.gilo.wc.ui.BaseActivity
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.ui.BaseActivity
import me.gilo.woodroid.models.Coupon
import retrofit2.Call
import retrofit2.Callback

View File

@ -1,11 +1,11 @@
package me.gilo.wc.ui.coupon
package me.gilo.woodroid.app.ui.coupon
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_coupon.*
import kotlinx.android.synthetic.main.content_coupon.*
import me.gilo.wc.R
import me.gilo.wc.ui.BaseActivity
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.ui.BaseActivity
import me.gilo.woodroid.models.Coupon
import retrofit2.Call
import retrofit2.Callback
@ -50,7 +50,7 @@ class CouponActivity : BaseActivity() {
override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) {
val coupon = response.body()!!
etCode.setText(coupon.code.toUpperCase())
etCode.setText(coupon.code?.toUpperCase())
etDescription.setText(coupon.description)
stopShowingLoading()
@ -70,7 +70,7 @@ class CouponActivity : BaseActivity() {
if (response.isSuccessful) {
val coupon = response.body()!!
etCode.setText(coupon.code.toUpperCase())
etCode.setText(coupon.code?.toUpperCase())
etDescription.setText(coupon.description)
finish()
@ -95,7 +95,7 @@ class CouponActivity : BaseActivity() {
override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) {
val coupon = response.body()!!
etCode.setText(coupon.code.toUpperCase())
etCode.setText(coupon.code?.toUpperCase())
etDescription.setText(coupon.description)
stopShowingLoading()

View File

@ -1,13 +1,13 @@
package me.gilo.wc.ui.coupon
package me.gilo.woodroid.app.ui.coupon
import android.content.Intent
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_coupons.*
import kotlinx.android.synthetic.main.content_coupons.*
import me.gilo.wc.R
import me.gilo.wc.adapter.CouponAdapter
import me.gilo.wc.ui.BaseActivity
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.CouponAdapter
import me.gilo.woodroid.app.ui.BaseActivity
import me.gilo.woodroid.models.Coupon
import me.gilo.woodroid.models.filters.CouponFilter
import retrofit2.Call
@ -28,7 +28,11 @@ class CouponsActivity : BaseActivity() {
title = "Coupons"
val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false)
val layoutManager = LinearLayoutManager(
baseContext,
LinearLayoutManager.VERTICAL,
false
)
rvCoupons.layoutManager = layoutManager
rvCoupons.isNestedScrollingEnabled = false
@ -48,7 +52,7 @@ class CouponsActivity : BaseActivity() {
//Not best practise, but works for purposes of demo
private fun coupons() {
val filter = CouponFilter()
filter.search = "FEB"
filter.setSearch("FEB")
woocommerce.CouponRepository().coupons(filter).enqueue(object : Callback<List<Coupon>> {
override fun onResponse(call: Call<List<Coupon>>, response: Response<List<Coupon>>) {

View File

@ -1,20 +1,15 @@
package me.gilo.wc.ui.customer
package me.gilo.woodroid.app.ui.customer
import android.arch.lifecycle.Observer
import androidx.lifecycle.Observer
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.support.v4.content.ContextCompat.startActivity
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.customer_basic_details.*
import me.gilo.wc.R
import me.gilo.wc.common.Status
import me.gilo.wc.models.User
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.common.Status
import me.gilo.woodroid.app.ui.WooDroidActivity
import me.gilo.woodroid.app.viewmodels.CustomerViewModel
import me.gilo.woodroid.models.Customer
import java.util.regex.Matcher
import java.util.regex.Pattern
@ -22,11 +17,13 @@ import java.util.regex.Pattern
class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
override lateinit var viewModel : CustomerViewModel
override lateinit var viewModel: CustomerViewModel
private val pattern = Pattern.compile(EMAIL_PATTERN)
private var matcher: Matcher? = null
lateinit var customer: Customer
var newCustomer = false
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
@ -38,22 +35,27 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
viewModel = getViewModel(CustomerViewModel::class.java)
title = "Basic Details"
customer()
customer()
flSave.setOnClickListener{save()}
flSave.setOnClickListener {
if (newCustomer) {
create()
} else {
save()
}
}
}
private fun customer() {
viewModel.currentCustomer().observe(this, Observer {
response->
when (response!!.status()){
Status.LOADING ->{
viewModel.currentCustomer().observe(this, Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
showLoading("Retrieve customer details", "This will only take a short while")
}
Status.SUCCESS ->{
Status.SUCCESS -> {
stopShowingLoading()
customer = response.data()[0]
@ -62,15 +64,18 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
etLastName.setText(customer.lastName)
etUsername.setText(customer.username)
newCustomer = false
}
Status.ERROR ->{
Status.ERROR -> {
stopShowingLoading()
Toast.makeText(baseContext, response.error().message.toString(), Toast.LENGTH_LONG).show()
}
Status.EMPTY ->{
Status.EMPTY -> {
stopShowingLoading()
newCustomer = true
}
}
@ -81,7 +86,7 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
private fun save() {
if (validates()) {
val email = etEmail.text.toString()
val firstName = etFirstName.text.toString()
val firstName = etFirstName.text.toString()
val lastName = etLastName.text.toString()
val username = etUsername.text.toString()
@ -90,24 +95,23 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
customer.lastName = lastName
customer.username = username
viewModel.update(customer.id, customer).observe(this, Observer {
response->
when (response!!.status()){
Status.LOADING ->{
viewModel.update(customer.id, customer).observe(this, Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
showLoading("Uploading account details", "This will only take a short while")
}
Status.SUCCESS ->{
Status.SUCCESS -> {
stopShowingLoading()
finish()
}
Status.ERROR ->{
Status.ERROR -> {
stopShowingLoading()
Toast.makeText(baseContext, response.error().message.toString(), Toast.LENGTH_LONG).show()
}
Status.EMPTY ->{
Status.EMPTY -> {
}
@ -115,6 +119,47 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
})
} else {
Toast.makeText(this, "Please correct the information entered", Toast.LENGTH_SHORT).show()
}
}
private fun create() {
if (validates()) {
val email = etEmail.text.toString()
val firstName = etFirstName.text.toString()
val lastName = etLastName.text.toString()
val username = etUsername.text.toString()
var customer = Customer()
customer.email = email
customer.firstName = firstName
customer.lastName = lastName
customer.username = username
viewModel.create(customer).observe(this, Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
showLoading("Uploading account details", "This will only take a short while")
}
Status.SUCCESS -> {
stopShowingLoading()
finish()
}
Status.ERROR -> {
stopShowingLoading()
Toast.makeText(baseContext, response.error().message.toString(), Toast.LENGTH_LONG).show()
}
Status.EMPTY -> {
}
}
})
} else {
Toast.makeText(this, "Please correct the information entered", Toast.LENGTH_SHORT).show()
@ -130,9 +175,9 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
var validation = true
val email = tilEmail.editText!!.text.toString()
val firstName = etFirstName.text.toString()
val firstName = etFirstName.text.toString()
val lastName = etLastName.text.toString()
val username = etUsername.text.toString()
val username = etUsername.text.toString()
@ -160,7 +205,8 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
}
companion object {
private const val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
private const val EMAIL_PATTERN =
"^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
}
}

View File

@ -1,18 +1,16 @@
package me.gilo.wc.ui.customer
package me.gilo.woodroid.app.ui.customer
import android.arch.lifecycle.Observer
import androidx.lifecycle.Observer
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.customer_billing_address.*
import kotlinx.android.synthetic.main.drawer_filter.view.*
import me.gilo.wc.R
import me.gilo.wc.common.Status
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.common.Status
import me.gilo.woodroid.app.ui.WooDroidActivity
import me.gilo.woodroid.app.viewmodels.CustomerViewModel
import me.gilo.woodroid.models.BillingAddress
import me.gilo.woodroid.models.Customer
@ -108,7 +106,7 @@ class BillingAddressActivity : WooDroidActivity<CustomerViewModel>() {
customer.billingAddress.country = country
customer.billingAddress.phone = phone
customer.billingAddress.email = FirebaseAuth.getInstance().currentUser!!.email
customer.billingAddress.email = FirebaseAuth.getInstance().currentUser!!.email!!
viewModel.update(customer.id, customer).observe(this, Observer {
response->

View File

@ -1,6 +1,6 @@
package me.gilo.wc.ui.customer
package me.gilo.woodroid.app.ui.customer
import android.arch.lifecycle.Observer
import androidx.lifecycle.Observer
import android.content.Context
import android.content.Intent
import android.os.Bundle
@ -8,10 +8,10 @@ import android.widget.Toast
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_profile.*
import kotlinx.android.synthetic.main.content_profile.*
import me.gilo.wc.R
import me.gilo.wc.common.Status
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.common.Status
import me.gilo.woodroid.app.ui.WooDroidActivity
import me.gilo.woodroid.app.viewmodels.CustomerViewModel
class ProfileActivity : WooDroidActivity<CustomerViewModel>() {

View File

@ -1,16 +1,15 @@
package me.gilo.wc.ui.customer
package me.gilo.woodroid.app.ui.customer
import android.arch.lifecycle.Observer
import androidx.lifecycle.Observer
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.customer_shipping_address.*
import me.gilo.wc.R
import me.gilo.wc.common.Status
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.common.Status
import me.gilo.woodroid.app.ui.WooDroidActivity
import me.gilo.woodroid.app.viewmodels.CustomerViewModel
import me.gilo.woodroid.models.Customer
import me.gilo.woodroid.models.ShippingAddress

View File

@ -1,16 +1,16 @@
package me.gilo.wc.ui.home
package me.gilo.woodroid.app.ui.home
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.widget.LinearLayoutManager
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.fragment_category.*
import me.gilo.wc.R
import me.gilo.wc.adapter.CategoryAdapter
import me.gilo.wc.common.Status
import me.gilo.wc.viewmodels.CategoryViewModel
import me.gilo.woodroid.app.R
import me.gilo.woodroid.app.adapter.CategoryAdapter
import me.gilo.woodroid.app.common.Status
import me.gilo.woodroid.app.viewmodels.CategoryViewModel
import me.gilo.woodroid.models.Category
import me.gilo.woodroid.models.filters.ProductCategoryFilter
import java.util.*
@ -46,7 +46,11 @@ class CategoryFragment : Fragment() {
viewModel = (activity as HomeActivity).getViewModel(CategoryViewModel::class.java)
val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
val layoutManager = LinearLayoutManager(
activity,
LinearLayoutManager.VERTICAL,
false
)
rvCategory.layoutManager = layoutManager
rvCategory.isNestedScrollingEnabled = false
@ -62,9 +66,9 @@ class CategoryFragment : Fragment() {
private fun categories() {
val filter = ProductCategoryFilter()
filter.per_page = 50
filter.setPer_page(50)
viewModel.categories(filter).observe(this, android.arch.lifecycle.Observer { response ->
viewModel.categories(filter).observe(this, androidx.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
}

Some files were not shown because too many files have changed in this diff Show More