Compare commits

..

No commits in common. "master" and "0.2.1" have entirely different histories.

567 changed files with 10533 additions and 9815 deletions

View File

@ -1,5 +1,8 @@
<component name="ProjectCodeStyleConfiguration"> <component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173"> <code_scheme name="Project" version="173">
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true" />
</AndroidXmlCodeStyleSettings>
<JetCodeStyleSettings> <JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings> </JetCodeStyleSettings>
@ -9,113 +12,6 @@
<option name="CONTINUATION_INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="USE_TAB_CHARACTER" value="true" /> <option name="USE_TAB_CHARACTER" value="true" />
</indentOptions> </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>
<codeStyleSettings language="kotlin"> <codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />

13
.idea/compiler.xml generated
View File

@ -1,13 +0,0 @@
<?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,21 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="delegatedBuild" value="false" />
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" /> <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" /> <option value="$PROJECT_DIR$/woodroid" />
</set> </set>
</option> </option>

View File

@ -1,8 +1,5 @@
<img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png"/>
# Woocommerce Android SDK # Woocommerce Android SDK
This is an woocommerce api client for android 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"/> <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"/>
@ -60,16 +57,6 @@ 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/>. 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
Setup for the new WP REST API integration (WooCommerce 2.6 or later): Setup for the new WP REST API integration (WooCommerce 2.6 or later):
@ -237,10 +224,5 @@ The sample app implements an MVVM approach which would look slightly different f
## Contribution ## Contribution
Contributions are highly welcomed, just create a PR 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,18 +1,19 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android { android {
compileSdkVersion 29 compileSdkVersion 28
defaultConfig { defaultConfig {
applicationId "me.gilo.woodroid.app" applicationId "me.gilo.wc"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 29 targetSdkVersion 28
versionCode 1 versionCode 1
versionName "1.0" versionName "1.0"
multiDexEnabled true multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} }
buildTypes { buildTypes {
release { release {
@ -33,178 +34,75 @@ android {
} }
compileOptions { compileOptions {
sourceCompatibility = '1.8' sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility = '1.8' targetCompatibility JavaVersion.VERSION_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 { ext {
arch_version = '1.1.1' arch_version = '1.1.1'
firebase_version = '11.8.0'
support_lib_version = '28.0.0' support_lib_version = '28.0.0'
dagger_version = '2.14.1' dagger_version = '2.14.1'
play_services = '15.0.1'
roomVersion = '1.1.1'
coroutinesVersion = "1.1.1"
}
kapt {
generateStubs = true
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) 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 "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 'androidx.appcompat:appcompat:1.1.0' implementation 'com.google.firebase:firebase-database:16.0.4'
implementation 'com.google.firebase:firebase-auth:16.0.4'
implementation 'com.google.android.material:material:1.0.0' implementation 'com.google.firebase:firebase-core:16.0.4'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'com.google.firebase:firebase-firestore:17.1.1'
testImplementation 'junit:junit:4.12' implementation 'com.google.firebase:firebase-storage:16.0.4'
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-database:4.2.0'
implementation 'com.firebaseui:firebase-ui-firestore:4.2.0' implementation 'com.firebaseui:firebase-ui-firestore:4.2.0'
implementation 'com.firebaseui:firebase-ui-storage:4.2.0' implementation 'com.firebaseui:firebase-ui-storage:4.2.0'
implementation 'com.google.firebase:firebase-messaging:20.0.1' implementation 'com.google.firebase:firebase-messaging:17.1.0'
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:calligraphy3:3.0.0'
implementation 'io.github.inflationx:viewpump:2.0.3' implementation 'io.github.inflationx:viewpump:1.0.0'
implementation 'org.greenrobot:eventbus:3.1.1'
implementation 'com.squareup.picasso:picasso:2.5.2' implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'com.android.support:support-v4:28.0.0'
testImplementation 'junit:junit:4.12'
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 'de.hdodenhof:circleimageview:2.1.0'
implementation 'com.romandanylyk:pageindicatorview:0.2.0@aar' implementation 'com.romandanylyk:pageindicatorview:0.2.0@aar'
// Android architecture components // Android architecture components
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02" implementation "android.arch.lifecycle:extensions:$arch_version"
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-rc02" annotationProcessor "android.arch.lifecycle:compiler:$arch_version"
implementation "android.arch.paging:runtime:1.0.1"
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. // Dagger.
implementation "com.google.dagger:dagger:2.15" implementation "com.google.dagger:dagger:$dagger_version"
implementation "com.google.dagger:dagger-android:2.15" implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:2.15" implementation "com.google.dagger:dagger-android-support:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:2.15" annotationProcessor "com.google.dagger:dagger-android-processor:$dagger_version"
kapt "com.google.dagger:dagger-compiler:2.15" annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
// Third-party libraries implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'net.danlew:android.joda:2.9.9.4'
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.miguelcatalan:materialsearchview:1.4.0'
implementation "com.hootsuite.android:nachos:1.1.1"
implementation 'me.relex:circleindicator:1.2.2@aar' implementation 'me.relex:circleindicator:1.2.2@aar'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" implementation 'net.danlew:android.joda:2.9.9.4'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
implementation project(path: ':woodroid') implementation 'org.greenrobot:eventbus:3.1.1'
implementation project(path: ':firebasecart') implementation 'android.arch.lifecycle:livedata:1.1.1'
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": { "client_info": {
"mobilesdk_app_id": "1:159460744011:android:6480f4108da5caac", "mobilesdk_app_id": "1:159460744011:android:6480f4108da5caac",
"android_client_info": { "android_client_info": {
"package_name": "me.gilo.woodroid.app" "package_name": "me.gilo.wc"
} }
}, },
"oauth_client": [ "oauth_client": [

View File

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

View File

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

View File

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

View File

@ -0,0 +1,32 @@
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

@ -0,0 +1,37 @@
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

@ -0,0 +1,34 @@
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

@ -0,0 +1,34 @@
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

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

View File

@ -0,0 +1,34 @@
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

@ -0,0 +1,36 @@
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

@ -0,0 +1,36 @@
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

@ -0,0 +1,35 @@
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

@ -0,0 +1,36 @@
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,19 +1,27 @@
package me.gilo.woodroid.app.adapter.viewholder package me.gilo.wc.adapter.viewholder
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.recyclerview.widget.RecyclerView import android.support.v7.widget.RecyclerView
import android.text.Html import android.text.Html
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.squareup.picasso.Picasso 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.text.SpannableString
import me.gilo.woodroid.app.R import android.graphics.Color
import me.gilo.woodroid.app.events.AddQuantityEvent import kotlinx.android.synthetic.main.content_product.*
import me.gilo.woodroid.app.events.LessQuantityEvent import me.gilo.wc.R
import me.gilo.woodroid.app.models.CartLineItem import me.gilo.wc.events.AddQuantityEvent
import me.gilo.woodroid.app.ui.product.ProductActivity 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 org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,12 +1,13 @@
package me.gilo.woodroid.app.common; package me.gilo.wc.common;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import androidx.lifecycle.ViewModel; import android.arch.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider; import android.arch.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders; import android.arch.lifecycle.ViewModelProviders;
import android.content.Context; import android.content.Context;
import dagger.android.support.DaggerAppCompatActivity; import dagger.android.support.DaggerAppCompatActivity;
import io.github.inflationx.viewpump.ViewPumpContextWrapper; import io.github.inflationx.viewpump.ViewPumpContextWrapper;
import me.gilo.wc.ui.state.ProgressDialogFragment;
import javax.inject.Inject; import javax.inject.Inject;

View File

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

View File

@ -0,0 +1,25 @@
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,7 +1,7 @@
package me.gilo.woodroid.app.common; package me.gilo.wc.common;
import androidx.lifecycle.LiveData; import android.arch.lifecycle.LiveData;
import androidx.annotation.NonNull; import android.support.annotation.NonNull;
import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task; import com.google.android.gms.tasks.Task;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,58 @@
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

@ -0,0 +1,25 @@
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

@ -0,0 +1,38 @@
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

@ -0,0 +1,46 @@
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,6 +1,6 @@
package me.gilo.woodroid.app.di; package me.gilo.wc.di;
import androidx.lifecycle.ViewModel; import android.arch.lifecycle.ViewModel;
import dagger.MapKey; import dagger.MapKey;
import java.lang.annotation.*; import java.lang.annotation.*;

View File

@ -0,0 +1,58 @@
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,6 +1,7 @@
package me.gilo.woodroid.app.events; package me.gilo.wc.events;
import me.gilo.woodroid.app.models.CartLineItem; import me.gilo.wc.models.CartLineItem;
import me.gilo.woodroid.models.ProductReview;
public class AddQuantityEvent { public class AddQuantityEvent {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,113 @@
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

@ -0,0 +1,73 @@
package me.gilo.wc.repo;
import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.Woocommerce;
import me.gilo.woodroid.models.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

@ -0,0 +1,83 @@
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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,50 @@
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,8 +1,9 @@
package me.gilo.woodroid.app.ui.checkout package me.gilo.wc.ui.checkout
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import android.support.design.widget.Snackbar
import me.gilo.woodroid.app.R import android.support.v7.app.AppCompatActivity
import me.gilo.wc.R
import kotlinx.android.synthetic.main.activity_checkout.* import kotlinx.android.synthetic.main.activity_checkout.*
@ -13,6 +14,10 @@ class CheckoutActivity : AppCompatActivity() {
setContentView(R.layout.activity_checkout) setContentView(R.layout.activity_checkout)
setSupportActionBar(toolbar) 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.woodroid.app.ui.coupon package me.gilo.wc.ui.coupon
import android.os.Bundle import android.os.Bundle
import kotlinx.android.synthetic.main.activity_add_coupon.* import kotlinx.android.synthetic.main.activity_add_coupon.*
import kotlinx.android.synthetic.main.content_add_coupon.* import kotlinx.android.synthetic.main.content_add_coupon.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.ui.BaseActivity import me.gilo.wc.ui.BaseActivity
import me.gilo.woodroid.models.Coupon import me.gilo.woodroid.models.Coupon
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback

View File

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

View File

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

View File

@ -1,15 +1,20 @@
package me.gilo.woodroid.app.ui.customer package me.gilo.wc.ui.customer
import androidx.lifecycle.Observer import android.arch.lifecycle.Observer
import android.content.Context import android.content.Context
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.ContextCompat.startActivity
import android.widget.Toast import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import io.github.inflationx.viewpump.ViewPumpContextWrapper import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.customer_basic_details.* import kotlinx.android.synthetic.main.customer_basic_details.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.Status
import me.gilo.woodroid.app.ui.WooDroidActivity import me.gilo.wc.models.User
import me.gilo.woodroid.app.viewmodels.CustomerViewModel import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.woodroid.models.Customer import me.gilo.woodroid.models.Customer
import java.util.regex.Matcher import java.util.regex.Matcher
import java.util.regex.Pattern import java.util.regex.Pattern
@ -22,8 +27,6 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
private var matcher: Matcher? = null private var matcher: Matcher? = null
lateinit var customer: Customer lateinit var customer: Customer
var newCustomer = false
override fun attachBaseContext(newBase: Context) { override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)) super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
} }
@ -37,19 +40,14 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
customer() customer()
flSave.setOnClickListener { flSave.setOnClickListener{save()}
if (newCustomer) {
create()
} else {
save()
}
}
} }
private fun customer() { private fun customer() {
viewModel.currentCustomer().observe(this, Observer { response -> viewModel.currentCustomer().observe(this, Observer {
response->
when (response!!.status()){ when (response!!.status()){
Status.LOADING ->{ Status.LOADING ->{
showLoading("Retrieve customer details", "This will only take a short while") showLoading("Retrieve customer details", "This will only take a short while")
@ -64,7 +62,6 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
etLastName.setText(customer.lastName) etLastName.setText(customer.lastName)
etUsername.setText(customer.username) etUsername.setText(customer.username)
newCustomer = false
} }
Status.ERROR ->{ Status.ERROR ->{
@ -74,8 +71,6 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
Status.EMPTY ->{ Status.EMPTY ->{
stopShowingLoading() stopShowingLoading()
newCustomer = true
} }
} }
@ -95,7 +90,8 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
customer.lastName = lastName customer.lastName = lastName
customer.username = username customer.username = username
viewModel.update(customer.id, customer).observe(this, Observer { response -> viewModel.update(customer.id, customer).observe(this, Observer {
response->
when (response!!.status()){ when (response!!.status()){
Status.LOADING ->{ Status.LOADING ->{
showLoading("Uploading account details", "This will only take a short while") showLoading("Uploading account details", "This will only take a short while")
@ -119,47 +115,6 @@ 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 { } else {
Toast.makeText(this, "Please correct the information entered", Toast.LENGTH_SHORT).show() Toast.makeText(this, "Please correct the information entered", Toast.LENGTH_SHORT).show()
@ -205,8 +160,7 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
} }
companion object { companion object {
private const val EMAIL_PATTERN = private const val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
"^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -1,15 +1,19 @@
package me.gilo.woodroid.app.ui.home package me.gilo.wc.ui.home
import android.content.Context
import android.os.Bundle import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView import android.support.design.widget.BottomNavigationView
import androidx.fragment.app.Fragment import android.support.v4.app.Fragment
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_home.* import kotlinx.android.synthetic.main.activity_home.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.ui.WooDroidActivity import me.gilo.wc.common.BaseActivity
import me.gilo.woodroid.app.viewmodels.CartViewModel
class HomeActivity : WooDroidActivity<CartViewModel>() { class HomeActivity : BaseActivity() {
override lateinit var viewModel: CartViewModel
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
@ -38,8 +42,6 @@ class HomeActivity : WooDroidActivity<CartViewModel>() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home) setContentView(R.layout.activity_home)
setSupportActionBar(toolbar)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
val transaction = supportFragmentManager.beginTransaction() val transaction = supportFragmentManager.beginTransaction()

View File

@ -1,17 +1,17 @@
package me.gilo.woodroid.app.ui.home package me.gilo.wc.ui.home
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import android.support.v4.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.fragment_home.* import kotlinx.android.synthetic.main.fragment_home.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.adapter.HomeProductAdapter import me.gilo.wc.adapter.HomeProductAdapter
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.Status
import me.gilo.woodroid.app.viewmodels.ProductViewModel import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.woodroid.models.Product import me.gilo.woodroid.models.Product
import me.gilo.woodroid.models.filters.ProductFilter import me.gilo.woodroid.models.filters.ProductFilter
import java.util.* import java.util.*
@ -60,11 +60,7 @@ class HomeFragment : Fragment() {
} }
private fun setUpProducts() { private fun setUpProducts() {
val layoutManager = LinearLayoutManager( val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
activity,
LinearLayoutManager.HORIZONTAL,
false
)
rvShop.layoutManager = layoutManager rvShop.layoutManager = layoutManager
rvShop.isNestedScrollingEnabled = false rvShop.isNestedScrollingEnabled = false
@ -78,11 +74,7 @@ class HomeFragment : Fragment() {
private fun setUpHoodies() { private fun setUpHoodies() {
val layoutManager = LinearLayoutManager( val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
activity,
LinearLayoutManager.HORIZONTAL,
false
)
rvHoodies.layoutManager = layoutManager rvHoodies.layoutManager = layoutManager
rvHoodies.isNestedScrollingEnabled = false rvHoodies.isNestedScrollingEnabled = false
@ -110,7 +102,7 @@ class HomeFragment : Fragment() {
} }
private fun products() { private fun products() {
viewModel.products().observe(viewLifecycleOwner, androidx.lifecycle.Observer { response -> viewModel.products().observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
@ -141,7 +133,7 @@ class HomeFragment : Fragment() {
} }
private fun products(filter: ProductFilter) { private fun products(filter: ProductFilter) {
viewModel.products(filter).observe(viewLifecycleOwner, androidx.lifecycle.Observer { response -> viewModel.products(filter).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
} }

View File

@ -1,24 +1,23 @@
package me.gilo.woodroid.app.ui.home package me.gilo.wc.ui.home
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import android.support.v4.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuth
import kotlinx.android.synthetic.main.fragment_profile.* import kotlinx.android.synthetic.main.fragment_profile.*
import me.gilo.raison.ui.user.onboarding.SignUpActivity import me.gilo.raison.ui.user.onboarding.SignUpActivity
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.ui.customer.ProfileActivity import me.gilo.wc.ui.customer.ProfileActivity
import me.gilo.woodroid.app.ui.order.MyOrdersActivity import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.woodroid.app.viewmodels.UserViewModel
class ProfileFragment : Fragment() { class ProfileFragment : Fragment() {
lateinit var viewModel: UserViewModel lateinit var viewModel: ProductViewModel
val TAG = "ProfileFragment" val TAG = "ProfileFragment"
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -38,8 +37,6 @@ class ProfileFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
viewModel = (activity as HomeActivity).getViewModel(UserViewModel::class.java)
llMyProfile.setOnClickListener{ llMyProfile.setOnClickListener{
if (FirebaseAuth.getInstance().currentUser != null) { if (FirebaseAuth.getInstance().currentUser != null) {
startActivity(Intent(activity, ProfileActivity::class.java)) startActivity(Intent(activity, ProfileActivity::class.java))
@ -48,15 +45,6 @@ class ProfileFragment : Fragment() {
} }
} }
llLogout.setOnClickListener{
viewModel.logout()
startActivity(Intent(activity, SignUpActivity::class.java))
}
llMyOrders.setOnClickListener{
startActivity(Intent(activity, MyOrdersActivity::class.java))
}
} }

View File

@ -0,0 +1,70 @@
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,18 +1,22 @@
package me.gilo.raison.ui.user.onboarding package me.gilo.raison.ui.user.onboarding
import androidx.lifecycle.Observer import android.arch.lifecycle.Observer
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.ContextCompat.startActivity
import android.widget.Toast import android.widget.Toast
import io.github.inflationx.viewpump.ViewPumpContextWrapper import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.content_sign_in.* import kotlinx.android.synthetic.main.content_sign_in.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.BaseActivity
import me.gilo.woodroid.app.ui.WooDroidActivity import me.gilo.wc.common.Status
import me.gilo.woodroid.app.ui.home.HomeActivity import me.gilo.wc.ui.WooDroidActivity
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment import me.gilo.wc.ui.home.HomeActivity
import me.gilo.woodroid.app.viewmodels.UserViewModel import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.wc.viewmodels.CustomerViewModel
import me.gilo.wc.viewmodels.UserViewModel
import org.json.JSONObject
import java.util.regex.Matcher import java.util.regex.Matcher
import java.util.regex.Pattern import java.util.regex.Pattern

View File

@ -1,20 +1,22 @@
package me.gilo.raison.ui.user.onboarding package me.gilo.raison.ui.user.onboarding
import androidx.lifecycle.Observer import android.arch.lifecycle.Observer
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.ContextCompat.startActivity
import android.widget.Toast import android.widget.Toast
import io.github.inflationx.viewpump.ViewPumpContextWrapper import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.content_sign_up.* import kotlinx.android.synthetic.main.content_sign_up.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.BaseActivity
import me.gilo.wc.common.Status
import me.gilo.woodroid.app.models.User import me.gilo.wc.models.User
import me.gilo.woodroid.app.ui.WooDroidActivity import me.gilo.wc.ui.WooDroidActivity
import me.gilo.woodroid.app.ui.home.HomeActivity import me.gilo.wc.ui.home.HomeActivity
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.woodroid.app.viewmodels.UserViewModel import me.gilo.wc.viewmodels.UserViewModel
import java.util.regex.Matcher import java.util.regex.Matcher
import java.util.regex.Pattern import java.util.regex.Pattern

View File

@ -1,9 +1,9 @@
package me.gilo.woodroid.app.ui.onboarding package me.gilo.wc.ui.onboarding
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import android.support.design.widget.Snackbar
import com.google.android.material.snackbar.Snackbar import android.support.v7.app.AppCompatActivity
import me.gilo.woodroid.app.R import me.gilo.wc.R
import kotlinx.android.synthetic.main.activity_user_details.* import kotlinx.android.synthetic.main.activity_user_details.*

View File

@ -0,0 +1,19 @@
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,28 +1,25 @@
package me.gilo.woodroid.app.ui.product package me.gilo.wc.ui.product
import androidx.lifecycle.Observer
import android.content.Context import android.content.Context
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.text.SpannableString
import android.view.View import android.view.View
import android.widget.Toast import com.google.common.primitives.UnsignedBytes.toInt
import io.github.inflationx.viewpump.ViewPumpContextWrapper import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_cart.* import kotlinx.android.synthetic.main.activity_cart.*
import kotlinx.android.synthetic.main.content_cart.* import kotlinx.android.synthetic.main.content_cart.*
import kotlinx.android.synthetic.main.single_cart_item.*
import kotlinx.android.synthetic.main.state_empty.* import kotlinx.android.synthetic.main.state_empty.*
import me.gilo.raison.ui.user.onboarding.SignUpActivity import me.gilo.wc.R
import me.gilo.woodroid.app.R import me.gilo.wc.adapter.CartAdapter
import me.gilo.woodroid.app.adapter.CartAdapter import me.gilo.wc.common.Status
import me.gilo.woodroid.app.common.Status import me.gilo.wc.events.AddQuantityEvent
import me.gilo.woodroid.app.events.AddQuantityEvent import me.gilo.wc.events.LessQuantityEvent
import me.gilo.woodroid.app.events.LessQuantityEvent import me.gilo.wc.events.ProductEvent
import me.gilo.woodroid.app.models.CartLineItem import me.gilo.wc.models.CartLineItem
import me.gilo.woodroid.app.ui.WooDroidActivity import me.gilo.wc.ui.WooDroidActivity
import me.gilo.woodroid.app.viewmodels.CartViewModel import me.gilo.wc.viewmodels.CartViewModel
import me.gilo.woodroid.models.Customer
import me.gilo.woodroid.models.LineItem
import me.gilo.woodroid.models.Order
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode import org.greenrobot.eventbus.ThreadMode
@ -34,7 +31,6 @@ class CartActivity : WooDroidActivity<CartViewModel>() {
var cartItems: ArrayList<CartLineItem> = ArrayList() var cartItems: ArrayList<CartLineItem> = ArrayList()
lateinit var adapter: CartAdapter lateinit var adapter: CartAdapter
lateinit var customer: Customer
override fun attachBaseContext(newBase: Context) { override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)) super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
@ -49,11 +45,7 @@ class CartActivity : WooDroidActivity<CartViewModel>() {
viewModel = getViewModel(CartViewModel::class.java) viewModel = getViewModel(CartViewModel::class.java)
title = "Cart" title = "Cart"
val layoutManager = LinearLayoutManager( val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false)
baseContext,
LinearLayoutManager.VERTICAL,
false
)
rvCart.layoutManager = layoutManager rvCart.layoutManager = layoutManager
rvCart.isNestedScrollingEnabled = false rvCart.isNestedScrollingEnabled = false
@ -63,17 +55,14 @@ class CartActivity : WooDroidActivity<CartViewModel>() {
rvCart.adapter = adapter rvCart.adapter = adapter
cart() cart()
customer()
llEmptyState_layout.visibility = View.GONE llEmptyState_layout.visibility = View.GONE
} }
override fun cart() { private fun cart() {
viewModel.cart().observe(this, androidx.lifecycle.Observer { response -> viewModel.cart().observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
showLoading() showLoading()
@ -108,33 +97,6 @@ class CartActivity : WooDroidActivity<CartViewModel>() {
} }
private fun createOrder(order : Order) {
viewModel.createOrder(order).observe(this, androidx.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
showLoading()
}
Status.SUCCESS -> {
finish()
}
Status.ERROR -> {
stopShowingLoading()
toast("Something went wrong!")
}
Status.EMPTY -> {
stopShowingLoading()
}
}
})
}
private fun setUpPage() { private fun setUpPage() {
var itemCount = cartItems.size var itemCount = cartItems.size
var total = 0 var total = 0
@ -158,34 +120,8 @@ class CartActivity : WooDroidActivity<CartViewModel>() {
tvTotalItemCountTitle.text = "Items ($itemCount)" tvTotalItemCountTitle.text = "Items ($itemCount)"
} }
tvTotalItemCost.text = "Ksh$total" tvTotalItemCost.text = "$$total"
tvTotal.text = "Ksh$total" tvTotal.text = "$$total"
flSave.setOnClickListener{
prepOrder()
}
}
private fun prepOrder() {
var order = Order()
var lineitems = ArrayList<LineItem>()
for (cartitem in cartItems){
var lineItem = LineItem()
lineItem.price = cartitem.getPrice().toString()
lineItem.productId = cartitem.productId
lineItem.quantity = cartitem.quantity
lineitems.add(lineItem)
}
order.lineItems = lineitems
order.billingAddress = customer.billingAddress
order.shippingAddress = customer.shippingAddress
order.customer = customer
createOrder(order)
} }
@ -221,7 +157,7 @@ class CartActivity : WooDroidActivity<CartViewModel>() {
} }
private fun updateCart(cartLineItem: CartLineItem, quantity: Int) { private fun updateCart(cartLineItem: CartLineItem, quantity: Int) {
viewModel.setQuantity(cartLineItem, quantity).observe(this, androidx.lifecycle.Observer { response -> viewModel.setQuantity(cartLineItem, quantity).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
@ -246,7 +182,7 @@ class CartActivity : WooDroidActivity<CartViewModel>() {
private fun delete(cartLineItem: CartLineItem) { private fun delete(cartLineItem: CartLineItem) {
viewModel.deleteItem(cartLineItem).observe(this, androidx.lifecycle.Observer { response -> viewModel.deleteItem(cartLineItem).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
@ -269,32 +205,5 @@ class CartActivity : WooDroidActivity<CartViewModel>() {
} }
private fun customer() {
viewModel.currentCustomer().observe(this, Observer {
response->
when (response!!.status()){
Status.LOADING ->{
}
Status.SUCCESS ->{
customer = response.data()[0]
}
Status.ERROR ->{
Toast.makeText(baseContext, response.error().message.toString(), Toast.LENGTH_LONG).show()
}
Status.EMPTY ->{
startActivity(Intent(baseContext, SignUpActivity::class.java))
finish()
}
}
})
}
} }

View File

@ -1,8 +1,9 @@
package me.gilo.woodroid.app.ui.product package me.gilo.wc.ui.product
import android.content.Intent import android.content.Intent
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.ContextCompat
import android.text.Html import android.text.Html
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
@ -10,22 +11,17 @@ import android.view.View
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.TextView import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import kotlinx.android.synthetic.main.activity_product.* import kotlinx.android.synthetic.main.activity_product.*
import kotlinx.android.synthetic.main.content_product.* import kotlinx.android.synthetic.main.content_product.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.adapter.ImagePagerAdapter import me.gilo.wc.adapter.ImagePagerAdapter
import me.gilo.woodroid.app.common.BaseActivity import me.gilo.wc.common.BaseActivity
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.Status
import me.gilo.woodroid.app.events.ProductEvent import me.gilo.wc.events.ProductEvent
import me.gilo.woodroid.app.models.CartLineItem import me.gilo.wc.models.CartLineItem
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.woodroid.app.utils.AppUtils import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.woodroid.app.viewmodels.ProductViewModel
import me.gilo.woodroid.core.cart.CartItem
import me.gilo.woodroid.models.Product import me.gilo.woodroid.models.Product
import me.gilo.woodroid.offlinecart.repo.RoomCartRepository
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
@ -55,47 +51,67 @@ class ProductActivity : BaseActivity() {
if (productId != 0){ if (productId != 0){
product(productId) product(productId)
checkIfExistsInCart(productId)
} }
cart() cart()
}
private fun checkIfExistsInCart(productId: Int) {
RoomCartRepository(baseContext).exists(productId).observe(this, Observer {productExists ->
if (productExists) {
fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.carnation_red))
fab.setImageDrawable(ContextCompat.getDrawable(baseContext, R.drawable.baseline_remove_shopping_cart_24))
}else{
fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorPrimary))
fab.setImageDrawable(ContextCompat.getDrawable(baseContext, R.drawable.baseline_add_shopping_cart_24))
}
productInCart = productExists
})
} }
private fun addToCart(product: Product) { private fun addToCart(product: Product) {
RoomCartRepository(baseContext).addToCart( viewModel.addToCart(product).observe(this, android.arch.lifecycle.Observer { response ->
CartItem( when (response!!.status()) {
productId = product.id, Status.LOADING -> {
productImage = product.getFeatureImage(),
quantity = 1,
productPrice = product.price
)
) }
Status.SUCCESS -> {
}
Status.ERROR -> {
}
Status.EMPTY -> {
}
}
})
} }
private fun removeFromCart(cartLineItem: CartLineItem) { private fun removeFromCart(cartLineItem: CartLineItem) {
viewModel.deleteItem(cartLineItem).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
}
Status.SUCCESS -> {
}
Status.ERROR -> {
toast("error : " + response.error().message)
}
Status.EMPTY -> {
}
}
})
} }
private fun product(productId : Int) { private fun product(productId : Int) {
viewModel.product(productId).observe(this, androidx.lifecycle.Observer { response -> viewModel.product(productId).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
flLoading.visibility = View.VISIBLE flLoading.visibility = View.VISIBLE
@ -126,7 +142,7 @@ class ProductActivity : BaseActivity() {
private fun cart() { private fun cart() {
viewModel.cart().observe(this, Observer { response -> viewModel.cart().observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
@ -147,6 +163,8 @@ class ProductActivity : BaseActivity() {
} }
} }
toggleFab()
if (cartItems.size == 0 && tvCartCounter != null){ if (cartItems.size == 0 && tvCartCounter != null){
tvCartCounter?.visibility = View.GONE tvCartCounter?.visibility = View.GONE
}else{ }else{
@ -164,6 +182,7 @@ class ProductActivity : BaseActivity() {
Status.EMPTY -> { Status.EMPTY -> {
productInCart = false productInCart = false
cartItems.clear() cartItems.clear()
toggleFab()
if (cartItems.size == 0 && tvCartCounter != null){ if (cartItems.size == 0 && tvCartCounter != null){
tvCartCounter?.visibility = View.GONE tvCartCounter?.visibility = View.GONE
@ -178,6 +197,17 @@ class ProductActivity : BaseActivity() {
} }
private fun toggleFab() {
if (productInCart) {
fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.carnation_red))
fab.setImageDrawable(ContextCompat.getDrawable(baseContext, R.drawable.baseline_remove_shopping_cart_24))
}else{
fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorPrimary))
fab.setImageDrawable(ContextCompat.getDrawable(baseContext, R.drawable.baseline_add_shopping_cart_24))
}
}
private fun setUpPage(product: Product) { private fun setUpPage(product: Product) {
tvTitle.text = product.name tvTitle.text = product.name
tvDescription.text = Html.fromHtml(product.description) tvDescription.text = Html.fromHtml(product.description)
@ -231,11 +261,11 @@ class ProductActivity : BaseActivity() {
var tvCartCounter : TextView? = null var tvCartCounter : TextView? = null
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.product, menu) menuInflater.inflate(me.gilo.wc.R.menu.product, menu)
val item = menu.findItem(R.id.menu_cart) val item = menu.findItem(me.gilo.wc.R.id.menu_cart)
val rootView = item.actionView as FrameLayout val rootView = item.actionView as FrameLayout
tvCartCounter = rootView.findViewById<TextView>(R.id.tvCart_counter) tvCartCounter = rootView.findViewById<TextView>(me.gilo.wc.R.id.tvCart_counter)
rootView.setOnClickListener{startActivity(Intent(baseContext, CartActivity::class.java))} rootView.setOnClickListener{startActivity(Intent(baseContext, CartActivity::class.java))}

View File

@ -1,22 +1,28 @@
package me.gilo.woodroid.app.ui.product package me.gilo.wc.ui.product
import android.app.SearchManager import android.app.SearchManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.ActionBarDrawerToggle import android.support.design.widget.Snackbar
import androidx.recyclerview.widget.GridLayoutManager import android.support.v4.view.GravityCompat
import android.support.v7.app.ActionBarDrawerToggle
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.SearchView
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast import android.widget.Toast
import io.github.inflationx.viewpump.ViewPumpContextWrapper import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.woodroid.app.R import me.gilo.wc.R
import kotlinx.android.synthetic.main.activity_product_search.* import kotlinx.android.synthetic.main.activity_product_search.*
import kotlinx.android.synthetic.main.content_shop.* import kotlinx.android.synthetic.main.content_shop.*
import me.gilo.woodroid.app.adapter.ProductAdapter import me.gilo.wc.adapter.ProductAdapter
import me.gilo.woodroid.app.common.BaseActivity import me.gilo.wc.common.BaseActivity
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.Status
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.woodroid.app.viewmodels.ProductViewModel import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.woodroid.models.Product import me.gilo.woodroid.models.Product
import org.json.JSONObject import org.json.JSONObject
import java.util.ArrayList import java.util.ArrayList
@ -46,8 +52,7 @@ class ProductSearchActivity : BaseActivity() {
title = "Search" title = "Search"
val layoutManager = val layoutManager = GridLayoutManager(baseContext, 2)
GridLayoutManager(baseContext, 2)
rvShop.layoutManager = layoutManager rvShop.layoutManager = layoutManager
rvShop.isNestedScrollingEnabled = false rvShop.isNestedScrollingEnabled = false
@ -73,7 +78,7 @@ class ProductSearchActivity : BaseActivity() {
} }
private fun search(query : String) { private fun search(query : String) {
viewModel.search(query).observe(this, androidx.lifecycle.Observer { response -> viewModel.search(query).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
showLoading("Performing search", "This will only take a short while") showLoading("Performing search", "This will only take a short while")

View File

@ -1,9 +1,10 @@
package me.gilo.woodroid.app.ui.product package me.gilo.wc.ui.product
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.core.view.GravityCompat import android.support.v4.view.GravityCompat
import androidx.recyclerview.widget.GridLayoutManager import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.LinearLayoutManager
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.widget.Toast import android.widget.Toast
@ -11,13 +12,13 @@ import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_shop.* import kotlinx.android.synthetic.main.activity_shop.*
import kotlinx.android.synthetic.main.content_shop.* import kotlinx.android.synthetic.main.content_shop.*
import kotlinx.android.synthetic.main.drawer_filter.* import kotlinx.android.synthetic.main.drawer_filter.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.adapter.ProductAdapter import me.gilo.wc.adapter.HomeProductAdapter
import me.gilo.woodroid.app.common.BaseActivity import me.gilo.wc.adapter.ProductAdapter
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.BaseActivity
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment import me.gilo.wc.common.Status
import me.gilo.woodroid.app.utils.AppUtils import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.woodroid.app.viewmodels.ProductViewModel import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.woodroid.models.Product import me.gilo.woodroid.models.Product
import me.gilo.woodroid.models.filters.ProductFilter import me.gilo.woodroid.models.filters.ProductFilter
import java.util.* import java.util.*
@ -65,8 +66,7 @@ class ShopActivity : BaseActivity() {
} }
private fun setUpPage() { private fun setUpPage() {
val layoutManager = val layoutManager = GridLayoutManager(baseContext, 2)
GridLayoutManager(baseContext, 2)
rvShop.layoutManager = layoutManager rvShop.layoutManager = layoutManager
rvShop.isNestedScrollingEnabled = false rvShop.isNestedScrollingEnabled = false
@ -80,7 +80,7 @@ class ShopActivity : BaseActivity() {
val filter = ProductFilter() val filter = ProductFilter()
if (etSearch.text.toString().isNotEmpty()){ if (etSearch.text.toString().isNotEmpty()){
filter.setSearch(etSearch.text.toString()) filter.search = etSearch.text.toString()
} }
if (etMinPrice.text.toString().isNotEmpty()){ if (etMinPrice.text.toString().isNotEmpty()){
@ -105,7 +105,7 @@ class ShopActivity : BaseActivity() {
} }
private fun products(filter: ProductFilter) { private fun products(filter: ProductFilter) {
viewModel.products(filter).observe(this, androidx.lifecycle.Observer { response -> viewModel.products(filter).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
} }
@ -136,11 +136,30 @@ class ShopActivity : BaseActivity() {
} }
private fun cart() { private fun cart() {
val cartKey = AppUtils(baseContext).cartSession viewModel.cart(baseContext).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
}
Status.SUCCESS -> {
val cartResponse = response.data()
}
Status.ERROR -> {
}
Status.EMPTY -> {
}
}
})
} }
private fun search(query : String) { private fun search(query : String) {
viewModel.search(query).observe(this, androidx.lifecycle.Observer { response -> viewModel.search(query).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
} }
@ -172,7 +191,7 @@ class ShopActivity : BaseActivity() {
} }
private fun products() { private fun products() {
viewModel.products().observe(this, androidx.lifecycle.Observer { response -> viewModel.products().observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {

View File

@ -1,13 +1,13 @@
package me.gilo.woodroid.app.ui.product.section package me.gilo.wc.ui.product.section
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.DialogFragment import android.support.v4.app.DialogFragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import kotlinx.android.synthetic.main.section_add_a_review.* import kotlinx.android.synthetic.main.section_add_a_review.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.events.ReviewEvent import me.gilo.wc.events.ReviewEvent
import me.gilo.woodroid.models.ProductReview import me.gilo.woodroid.models.ProductReview
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus

View File

@ -1,20 +1,21 @@
package me.gilo.woodroid.app.ui.product.section package me.gilo.wc.ui.product.section
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import android.support.v4.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import kotlinx.android.synthetic.main.section_product_reviews.* import kotlinx.android.synthetic.main.section_product_reviews.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.adapter.ProductReviewAdapter import me.gilo.wc.adapter.ProductReviewAdapter
import me.gilo.woodroid.app.common.BaseActivity import me.gilo.wc.common.BaseActivity
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.Status
import me.gilo.woodroid.app.events.ReviewEvent import me.gilo.wc.events.ReviewEvent
import me.gilo.woodroid.app.ui.product.ProductActivity import me.gilo.wc.ui.product.ProductActivity
import me.gilo.woodroid.app.viewmodels.ReviewViewModel import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.wc.viewmodels.ReviewViewModel
import me.gilo.woodroid.models.ProductReview import me.gilo.woodroid.models.ProductReview
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
@ -59,11 +60,7 @@ class ProductReviewsFragment : Fragment() {
private fun reviews(productId : Int) { private fun reviews(productId : Int) {
val layoutManager = LinearLayoutManager( val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
activity,
LinearLayoutManager.VERTICAL,
false
)
rvReviews.layoutManager = layoutManager rvReviews.layoutManager = layoutManager
rvReviews.isNestedScrollingEnabled = false rvReviews.isNestedScrollingEnabled = false
@ -73,7 +70,7 @@ class ProductReviewsFragment : Fragment() {
rvReviews.adapter = productReviewAdapter rvReviews.adapter = productReviewAdapter
viewModel.reviews(productId).observe(this, androidx.lifecycle.Observer { response -> viewModel.reviews(productId).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {
@ -118,8 +115,7 @@ class ProductReviewsFragment : Fragment() {
private fun addAReviewDialog() { private fun addAReviewDialog() {
val manager = childFragmentManager val manager = childFragmentManager
addAReviewFragment = addAReviewFragment = AddAReviewDialogFragment.newInstance(productId)
AddAReviewDialogFragment.newInstance(productId)
addAReviewFragment.isCancelable = true addAReviewFragment.isCancelable = true
addAReviewFragment.show(manager, "add Review") addAReviewFragment.show(manager, "add Review")
} }
@ -140,7 +136,7 @@ class ProductReviewsFragment : Fragment() {
} }
private fun save(review: ProductReview) { private fun save(review: ProductReview) {
viewModel.create(review).observe(this, androidx.lifecycle.Observer { response -> viewModel.create(review).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {

View File

@ -1,18 +1,18 @@
package me.gilo.woodroid.app.ui.product.section package me.gilo.wc.ui.product.section
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import android.support.v4.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import kotlinx.android.synthetic.main.section_related_products.* import kotlinx.android.synthetic.main.section_related_products.*
import me.gilo.woodroid.app.R import me.gilo.wc.R
import me.gilo.woodroid.app.adapter.HomeProductAdapter import me.gilo.wc.adapter.HomeProductAdapter
import me.gilo.woodroid.app.common.BaseActivity import me.gilo.wc.common.BaseActivity
import me.gilo.woodroid.app.common.Status import me.gilo.wc.common.Status
import me.gilo.woodroid.app.events.ProductEvent import me.gilo.wc.events.ProductEvent
import me.gilo.woodroid.app.viewmodels.ProductViewModel import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.woodroid.models.Product import me.gilo.woodroid.models.Product
import me.gilo.woodroid.models.filters.ProductFilter import me.gilo.woodroid.models.filters.ProductFilter
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
@ -57,11 +57,7 @@ class RelatedProductsFragment : Fragment() {
} }
private fun similarProducts(product: Product) { private fun similarProducts(product: Product) {
val layoutManager = LinearLayoutManager( val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
activity,
LinearLayoutManager.HORIZONTAL,
false
)
rvShop.layoutManager = layoutManager rvShop.layoutManager = layoutManager
rvShop.isNestedScrollingEnabled = false rvShop.isNestedScrollingEnabled = false
@ -71,9 +67,9 @@ class RelatedProductsFragment : Fragment() {
rvShop.adapter = adapter rvShop.adapter = adapter
val filter = ProductFilter() val filter = ProductFilter()
filter.setInclude(product.related_ids.toIntArray()) filter.include = product.related_ids.toIntArray()
viewModel.products(filter).observe(this, androidx.lifecycle.Observer { response -> viewModel.products(filter).observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) { when (response!!.status()) {
Status.LOADING -> { Status.LOADING -> {

View File

@ -1,12 +1,12 @@
package me.gilo.woodroid.app.ui.state; package me.gilo.wc.ui.state;
import android.os.Bundle; import android.os.Bundle;
import androidx.fragment.app.DialogFragment; import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import me.gilo.woodroid.app.R; import me.gilo.wc.R;
public class ProgressDialogFragment extends DialogFragment { public class ProgressDialogFragment extends DialogFragment {

View File

@ -1,10 +1,10 @@
package me.gilo.woodroid.app.utils; package me.gilo.wc.utils;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Handler; import android.os.Handler;
import androidx.annotation.StringRes; import android.support.annotation.StringRes;
import android.util.Base64; import android.util.Base64;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.Toast; import android.widget.Toast;
@ -63,7 +63,7 @@ public class AppUtils {
public String getCartSession() { public String getCartSession() {
SharedPreferences prefs = context.getSharedPreferences(MY_PREFS_NAME, context.MODE_PRIVATE); SharedPreferences prefs = context.getSharedPreferences(MY_PREFS_NAME, context.MODE_PRIVATE);
return prefs.getString("cartSession", ""); return prefs.getString("cartSession", null);
} }
public String getExpiry() { public String getExpiry() {

View File

@ -1,4 +1,4 @@
package me.gilo.woodroid.app.utils; package me.gilo.wc.utils;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;

View File

@ -1,4 +1,4 @@
package me.gilo.woodroid.app.utils; package me.gilo.wc.utils;
import org.joda.time.DateMidnight; import org.joda.time.DateMidnight;
import org.joda.time.DateTime; import org.joda.time.DateTime;

View File

@ -1,4 +1,4 @@
package me.gilo.woodroid.app.utils; package me.gilo.wc.utils;
public interface OnItemClickListener<T> { public interface OnItemClickListener<T> {
void onItemClick(T data); void onItemClick(T data);

View File

@ -1,7 +1,7 @@
package me.gilo.woodroid.app.utils; package me.gilo.wc.utils;
import android.content.Context; import android.content.Context;
import androidx.recyclerview.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector; import android.view.GestureDetector;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;

View File

@ -1,4 +1,4 @@
package me.gilo.woodroid.app.utils; package me.gilo.wc.utils;
import java.text.DecimalFormat; import java.text.DecimalFormat;

View File

@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package me.gilo.woodroid.app.utils; package me.gilo.wc.utils;
import androidx.lifecycle.ViewModel; import android.arch.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider; import android.arch.lifecycle.ViewModelProvider;
import androidx.annotation.NonNull; import android.support.annotation.NonNull;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider; import javax.inject.Provider;

View File

@ -0,0 +1,56 @@
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

@ -1,8 +1,8 @@
package me.gilo.woodroid.app.viewmodels; package me.gilo.wc.viewmodels;
import androidx.lifecycle.ViewModel; import android.arch.lifecycle.ViewModel;
import me.gilo.woodroid.app.common.WooLiveData; import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.app.repo.CategoryRepository; import me.gilo.wc.repo.CategoryRepository;
import me.gilo.woodroid.models.Category; import me.gilo.woodroid.models.Category;
import me.gilo.woodroid.models.filters.ProductCategoryFilter; import me.gilo.woodroid.models.filters.ProductCategoryFilter;

View File

@ -1,8 +1,9 @@
package me.gilo.woodroid.app.viewmodels; package me.gilo.wc.viewmodels;
import androidx.lifecycle.ViewModel; import android.arch.lifecycle.ViewModel;
import me.gilo.woodroid.app.common.WooLiveData; import com.google.firebase.auth.FirebaseAuth;
import me.gilo.woodroid.app.repo.CustomerRepository; import me.gilo.wc.common.WooLiveData;
import me.gilo.wc.repo.CustomerRepository;
import me.gilo.woodroid.models.Customer; import me.gilo.woodroid.models.Customer;
import me.gilo.woodroid.models.filters.CustomerFilter; import me.gilo.woodroid.models.filters.CustomerFilter;

View File

@ -1,16 +1,18 @@
package me.gilo.woodroid.app.viewmodels; package me.gilo.wc.viewmodels;
import androidx.lifecycle.MutableLiveData; import android.arch.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel; import android.arch.lifecycle.ViewModel;
import me.gilo.woodroid.app.common.CompletionGenericLiveData; import android.content.Context;
import me.gilo.woodroid.app.common.QueryLiveData; import com.google.firebase.firestore.DocumentReference;
import me.gilo.woodroid.app.common.WooLiveData; import me.gilo.wc.common.CompletionGenericLiveData;
import me.gilo.woodroid.app.models.CartLineItem; import me.gilo.wc.common.QueryLiveData;
import me.gilo.woodroid.app.repo.CartRepository; import me.gilo.wc.common.WooLiveData;
import me.gilo.woodroid.app.repo.OrderRepository; import me.gilo.wc.models.CartLineItem;
import me.gilo.woodroid.app.repo.ProductRepository; import me.gilo.wc.repo.CartRepository;
import me.gilo.wc.repo.OrderRepository;
import me.gilo.woodroid.models.Order; import me.gilo.wc.repo.ProductRepository;
import me.gilo.wc.repo.ReviewRepository;
import me.gilo.woodroid.models.LineItem;
import me.gilo.woodroid.models.Product; import me.gilo.woodroid.models.Product;
import me.gilo.woodroid.models.ProductReview; import me.gilo.woodroid.models.ProductReview;
import me.gilo.woodroid.models.filters.ProductFilter; import me.gilo.woodroid.models.filters.ProductFilter;
@ -48,9 +50,8 @@ public final class ProductViewModel extends ViewModel {
return productRepository.products(); return productRepository.products();
} }
public CompletionGenericLiveData<DocumentReference> addToCart(Product product) {
public WooLiveData<Order> addToCart(int productId) { return cartRepository.addToCart(product);
return orderRepository.addToCart(productId);
} }
public QueryLiveData<CartLineItem> cart() { public QueryLiveData<CartLineItem> cart() {
@ -69,6 +70,10 @@ public final class ProductViewModel extends ViewModel {
return cartRepository.setQuantity(cartLineItem, quantity); return cartRepository.setQuantity(cartLineItem, quantity);
} }
public WooLiveData<Map<String, LineItem>> cart(Context context) {
return cartRepository.cart(context);
}
public WooLiveData<List<Product>> products(ProductFilter filter) { public WooLiveData<List<Product>> products(ProductFilter filter) {
return productRepository.products(filter); return productRepository.products(filter);
} }

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