Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f561de2e72 | ||
|
|
b6e5a32cd3 | ||
|
|
b941c425e8 | ||
|
|
250b805126 | ||
|
|
7ffffd7e80 | ||
|
|
6d401b1f87 | ||
|
|
00799f0830 | ||
|
|
d528e38709 | ||
|
|
e07d3236a3 | ||
|
|
b7b8d020b7 | ||
|
|
bf39bba675 | ||
|
|
d0e88fa726 | ||
|
|
0b3045ae81 | ||
|
|
24c45491b6 | ||
|
|
2cc68830e4 | ||
|
|
2f885897a0 | ||
|
|
6591cf8f95 | ||
|
|
47e5575417 | ||
|
|
7b13ab92c6 | ||
|
|
f3deac9ea0 | ||
|
|
51e651de76 | ||
|
|
b1de98db52 | ||
|
|
5bb5bd650e | ||
|
|
33b5a96a69 | ||
|
|
8e49de29da | ||
|
|
38db311926 | ||
|
|
fcaec04239 | ||
|
|
31602df99e | ||
|
|
1ec0747e26 | ||
|
|
ceda450bb8 | ||
|
|
3b08a0541c | ||
|
|
e8fc0899ca | ||
|
|
6b94ee730d | ||
|
|
b87f96d336 | ||
|
|
95a8d53349 |
110
.idea/codeStyles/Project.xml
generated
110
.idea/codeStyles/Project.xml
generated
@ -1,8 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<AndroidXmlCodeStyleSettings>
|
||||
<option name="USE_CUSTOM_SETTINGS" value="true" />
|
||||
</AndroidXmlCodeStyleSettings>
|
||||
<JetCodeStyleSettings>
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
</JetCodeStyleSettings>
|
||||
@ -12,6 +9,113 @@
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
<arrangement>
|
||||
<rules>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>xmlns:android</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>xmlns:.*</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:id</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:name</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>name</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>style</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>ANDROID_ATTRIBUTE_ORDER</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>.*</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
</rules>
|
||||
</arrangement>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="kotlin">
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
|
||||
13
.idea/compiler.xml
generated
Normal file
13
.idea/compiler.xml
generated
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel>
|
||||
<module name="app" target="1.8" />
|
||||
<module name="cocart" target="1.7" />
|
||||
<module name="core" target="1.7" />
|
||||
<module name="firebasecart" target="1.8" />
|
||||
<module name="offlinecart" target="1.8" />
|
||||
<module name="woodroid" target="1.8" />
|
||||
</bytecodeTargetLevel>
|
||||
</component>
|
||||
</project>
|
||||
7
.idea/gradle.xml
generated
7
.idea/gradle.xml
generated
@ -1,14 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="delegatedBuild" value="false" />
|
||||
<option name="testRunner" value="PLATFORM" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
<option value="$PROJECT_DIR$/cocart" />
|
||||
<option value="$PROJECT_DIR$/core" />
|
||||
<option value="$PROJECT_DIR$/firebasecart" />
|
||||
<option value="$PROJECT_DIR$/offlinecart" />
|
||||
<option value="$PROJECT_DIR$/woodroid" />
|
||||
</set>
|
||||
</option>
|
||||
|
||||
24
README.md
24
README.md
@ -1,5 +1,8 @@
|
||||
# Woocommerce Android SDK
|
||||
|
||||
|
||||
<img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png"/>
|
||||
|
||||
# Woocommerce Android SDK
|
||||
This is an woocommerce api client for android
|
||||
|
||||
<img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916911644.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916952806.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916959446.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916965766.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916980710.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553916989454.jpg" width="285"/> <img src="https://github.com/gilokimu/woocommerce-android-sdk/raw/master/screens/screenshot-1553917011606.jpg" width="285"/>
|
||||
@ -27,7 +30,7 @@ Step 2. Add the dependency
|
||||
<dependency>
|
||||
<groupId>com.github.gilokimu</groupId>
|
||||
<artifactId>woodroid</artifactId>
|
||||
<version>0.1.0</version>
|
||||
<version>0.2.0</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
@ -46,7 +49,7 @@ allprojects {
|
||||
Step 2. Add the dependency
|
||||
```gradle
|
||||
dependencies {
|
||||
implementation 'com.github.gilokimu:woodroid:0.1.0'
|
||||
implementation 'com.github.gilokimu:woodroid:0.2.0'
|
||||
}
|
||||
```
|
||||
|
||||
@ -57,6 +60,16 @@ Generate API credentials (Consumer Key & Consumer Secret) following this instruc
|
||||
|
||||
Check out the WooCommerce API endpoints and data that can be manipulated in <https://woocommerce.github.io/woocommerce-rest-api-docs/>.
|
||||
|
||||
## Demo
|
||||
I have left consumer key and secret within the app, for you to test the app without an installation of wordpress. To use my installation of wordpress, here are the credentials:
|
||||
|
||||
username: demo
|
||||
password: demo2019
|
||||
https://gilo.me/store/wp-admin
|
||||
|
||||
PS/ Do no harm
|
||||
|
||||
|
||||
## Setup
|
||||
|
||||
Setup for the new WP REST API integration (WooCommerce 2.6 or later):
|
||||
@ -224,5 +237,10 @@ The sample app implements an MVVM approach which would look slightly different f
|
||||
## Contribution
|
||||
Contributions are highly welcomed, just create a PR
|
||||
|
||||
## Slack
|
||||
You can also reach out through <a href="https://join.slack.com/t/woodroid/shared_invite/enQtODg1ODYzMDAzOTcxLTE4NDA0MTYyYjY5ZmVmNTU4OTEzYWQzZDcwN2Y1ZTZkMzk4ZDY0ZGU4NmZlMzQ1NjlhM2RlZDc4Mjc4ZjE2NzI">slack</a> in case of any issues with installation or feature request
|
||||
|
||||
## Love the Project?
|
||||
You can donate to support the project futher.<a class="donate-with-crypto" href="https://commerce.coinbase.com/checkout/3efb7008-27b1-4c64-934b-791e5c1a6cda"> Donate with Crypto </a>
|
||||
|
||||
|
||||
|
||||
184
app/build.gradle
184
app/build.gradle
@ -1,19 +1,18 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
apply plugin: 'kotlin-kapt'
|
||||
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
compileSdkVersion 29
|
||||
defaultConfig {
|
||||
applicationId "me.gilo.wc"
|
||||
applicationId "me.gilo.woodroid.app"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 28
|
||||
targetSdkVersion 29
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
multiDexEnabled true
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
@ -34,75 +33,178 @@ android {
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
sourceCompatibility = '1.8'
|
||||
targetCompatibility = '1.8'
|
||||
}
|
||||
|
||||
dataBinding {
|
||||
enabled = true
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/DEPENDENCIES'
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
// To inline the bytecode built with JVM target 1.8 into
|
||||
// bytecode that is being built with JVM target 1.6. (e.g. navArgs)
|
||||
|
||||
|
||||
}
|
||||
|
||||
configurations.all {
|
||||
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
|
||||
def requested = details.requested
|
||||
if (requested.group == "com.android.support") {
|
||||
if (!requested.name.startsWith("multidex")) {
|
||||
details.useVersion "26.+"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
all*.exclude group: 'com.google.guava', module: 'listenablefuture'
|
||||
}
|
||||
|
||||
ext {
|
||||
arch_version = '1.1.1'
|
||||
firebase_version = '11.8.0'
|
||||
support_lib_version = '28.0.0'
|
||||
dagger_version = '2.14.1'
|
||||
play_services = '15.0.1'
|
||||
roomVersion = '1.1.1'
|
||||
|
||||
coroutinesVersion = "1.1.1"
|
||||
|
||||
}
|
||||
|
||||
kapt {
|
||||
generateStubs = true
|
||||
}
|
||||
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
|
||||
implementation 'androidx.paging:paging-runtime-ktx:2.1.0'
|
||||
implementation 'com.google.android.gms:play-services-auth:17.0.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
implementation 'com.android.support:appcompat-v7:28.0.0'
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||
implementation 'com.android.support:design:28.0.0'
|
||||
|
||||
implementation 'com.google.firebase:firebase-database:16.0.4'
|
||||
implementation 'com.google.firebase:firebase-auth:16.0.4'
|
||||
implementation 'com.google.firebase:firebase-core:16.0.4'
|
||||
implementation 'com.google.firebase:firebase-firestore:17.1.1'
|
||||
implementation 'com.google.firebase:firebase-storage:16.0.4'
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||
|
||||
// Support Libs
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'androidx.browser:browser:1.0.0'
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.0.0'
|
||||
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'androidx.viewpager2:viewpager2:1.0.0-rc01'
|
||||
|
||||
//firebase stuff
|
||||
implementation 'com.google.firebase:firebase-database:19.2.0'
|
||||
implementation 'com.google.firebase:firebase-auth:19.1.0'
|
||||
implementation 'com.google.firebase:firebase-core:17.2.1'
|
||||
implementation 'com.google.firebase:firebase-firestore:21.3.0'
|
||||
implementation 'com.google.firebase:firebase-storage:19.1.0'
|
||||
implementation 'com.firebaseui:firebase-ui-database:4.2.0'
|
||||
implementation 'com.firebaseui:firebase-ui-firestore:4.2.0'
|
||||
implementation 'com.firebaseui:firebase-ui-storage:4.2.0'
|
||||
implementation 'com.google.firebase:firebase-messaging:17.1.0'
|
||||
implementation 'com.google.firebase:firebase-messaging:20.0.1'
|
||||
|
||||
|
||||
implementation 'com.google.android.gms:play-services-maps:17.0.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||
|
||||
implementation 'io.github.inflationx:calligraphy3:3.0.0'
|
||||
implementation 'io.github.inflationx:viewpump:1.0.0'
|
||||
implementation 'io.github.inflationx:viewpump:2.0.3'
|
||||
|
||||
implementation 'org.greenrobot:eventbus:3.1.1'
|
||||
implementation 'com.squareup.picasso:picasso:2.5.2'
|
||||
|
||||
implementation 'com.android.support:support-v4:28.0.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
||||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
||||
implementation project(path: ':woodroid')
|
||||
|
||||
implementation 'de.hdodenhof:circleimageview:2.1.0'
|
||||
|
||||
implementation 'com.romandanylyk:pageindicatorview:0.2.0@aar'
|
||||
|
||||
// Android architecture components
|
||||
implementation "android.arch.lifecycle:extensions:$arch_version"
|
||||
annotationProcessor "android.arch.lifecycle:compiler:$arch_version"
|
||||
implementation "android.arch.paging:runtime:1.0.1"
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
|
||||
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-rc02"
|
||||
|
||||
implementation 'androidx.core:core-ktx:1.1.0'
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
|
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-rc02"
|
||||
|
||||
// Room components
|
||||
implementation "androidx.room:room-runtime:2.2.1"
|
||||
kapt "androidx.room:room-compiler:2.2.1"
|
||||
androidTestImplementation "androidx.room:room-testing:2.2.1"
|
||||
|
||||
// Dagger.
|
||||
implementation "com.google.dagger:dagger:$dagger_version"
|
||||
implementation "com.google.dagger:dagger-android:$dagger_version"
|
||||
implementation "com.google.dagger:dagger-android-support:$dagger_version"
|
||||
annotationProcessor "com.google.dagger:dagger-android-processor:$dagger_version"
|
||||
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||
implementation "com.google.dagger:dagger:2.15"
|
||||
implementation "com.google.dagger:dagger-android:2.15"
|
||||
implementation "com.google.dagger:dagger-android-support:2.15"
|
||||
kapt "com.google.dagger:dagger-android-processor:2.15"
|
||||
kapt "com.google.dagger:dagger-compiler:2.15"
|
||||
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
|
||||
|
||||
|
||||
implementation 'com.miguelcatalan:materialsearchview:1.4.0'
|
||||
|
||||
implementation 'me.relex:circleindicator:1.2.2@aar'
|
||||
// Third-party libraries
|
||||
|
||||
implementation 'net.danlew:android.joda:2.9.9.4'
|
||||
|
||||
implementation 'org.greenrobot:eventbus:3.1.1'
|
||||
implementation 'android.arch.lifecycle:livedata:1.1.1'
|
||||
implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3'
|
||||
implementation 'com.akexorcist:googledirectionlibrary:1.0.5'
|
||||
//noinspection GradleDynamicVersion
|
||||
implementation 'com.google.maps.android:android-maps-utils:0.5+'
|
||||
implementation 'com.github.aarsy.googlemapsanimations:googlemapsanimations:1.0.5'
|
||||
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
|
||||
|
||||
implementation 'com.google.code.gson:gson:2.8.5'
|
||||
|
||||
implementation 'com.jakewharton.retrofit:retrofit1-okhttp3-client:1.1.0'
|
||||
|
||||
implementation 'io.reactivex:rxandroid:1.2.1'
|
||||
implementation 'io.reactivex:rxjava:1.3.0'
|
||||
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
|
||||
implementation 'androidx.room:room-runtime:2.2.2'
|
||||
kapt 'androidx.room:room-compiler:2.2.2'
|
||||
|
||||
|
||||
implementation 'org.greenrobot:eventbus:3.1.1'
|
||||
|
||||
implementation "com.hootsuite.android:nachos:1.1.1"
|
||||
|
||||
implementation 'me.relex:circleindicator:1.2.2@aar'
|
||||
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
|
||||
|
||||
implementation project(path: ':woodroid')
|
||||
implementation project(path: ':firebasecart')
|
||||
implementation project(path: ':core')
|
||||
implementation project(path: ':cocart')
|
||||
implementation project(path: ':offlinecart')
|
||||
|
||||
debugImplementation 'im.dino:dbinspector:3.4.1@aar'
|
||||
|
||||
implementation 'org.fabiomsr:moneytextview:1.1.0'
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:159460744011:android:6480f4108da5caac",
|
||||
"android_client_info": {
|
||||
"package_name": "me.gilo.wc"
|
||||
"package_name": "me.gilo.woodroid.app"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package me.gilo.wc
|
||||
package me.gilo.woodroid
|
||||
|
||||
import android.support.test.InstrumentationRegistry
|
||||
import android.support.test.runner.AndroidJUnit4
|
||||
@ -1,65 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="me.gilo.wc">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="me.gilo.woodroid.app">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
||||
<application
|
||||
android:name=".WcApp"
|
||||
android:name="me.gilo.woodroid.app.WcApp"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:ignore="GoogleAppIndexingWarning">
|
||||
<activity
|
||||
android:name=".ui.onboarding.AnonymousSignInActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.order.OrderActivity"
|
||||
android:label="@string/title_activity_order"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name="me.gilo.woodroid.app.ui.onboarding.AnonymousSignInActivity"
|
||||
android:label="@string/title_activity_anonymous_sign_in"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.checkout.CheckoutActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.checkout.CheckoutActivity"
|
||||
android:label="@string/title_activity_checkout"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.product.CartActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.product.CartActivity"
|
||||
android:label="@string/title_activity_cart"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.customer.ProfileActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.customer.ProfileActivity"
|
||||
android:label="@string/title_activity_profile"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.customer.ShippingAddressActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.customer.ShippingAddressActivity"
|
||||
android:label="@string/title_activity_shipping_address"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.customer.BillingAddressActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.customer.BillingAddressActivity"
|
||||
android:label="@string/title_activity_billing_address"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.customer.BasicCustomerDetailsActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.customer.BasicCustomerDetailsActivity"
|
||||
android:label="@string/title_activity_basic_customer_details"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.onboarding.UserDetailsActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.onboarding.UserDetailsActivity"
|
||||
android:label="@string/title_activity_user_details"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.order.MyOrdersActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.order.MyOrdersActivity"
|
||||
android:label="@string/title_activity_my_orders"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.home.HomeActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.home.HomeActivity"
|
||||
android:label="@string/title_activity_home"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
@ -84,12 +91,12 @@
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.product.ProductActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.product.ProductActivity"
|
||||
android:label="@string/title_activity_product"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.product.ProductSearchActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.product.ProductSearchActivity"
|
||||
android:label="@string/title_activity_product_search"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
<intent-filter>
|
||||
@ -97,34 +104,34 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.coupon.CouponActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.coupon.CouponActivity"
|
||||
android:label="@string/title_activity_coupon"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.coupon.CouponsActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.coupon.CouponsActivity"
|
||||
android:label="@string/title_activity_coupons"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.coupon.AddCouponActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.coupon.AddCouponActivity"
|
||||
android:label="@string/title_activity_add_coupon"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.MenuActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.MenuActivity"
|
||||
android:label="@string/title_activity_menu"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.product.ShopActivity"
|
||||
android:name="me.gilo.woodroid.app.ui.product.ShopActivity"
|
||||
android:label="@string/title_activity_shop"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
<meta-data
|
||||
android:name="android.app.searchable"
|
||||
android:resource="@xml/searchable"/>
|
||||
</activity>
|
||||
<activity android:name=".MainActivity">
|
||||
<activity android:name="me.gilo.woodroid.app.MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
|
||||
@ -1,32 +0,0 @@
|
||||
package me.gilo.wc;
|
||||
|
||||
import android.app.Application;
|
||||
import dagger.android.AndroidInjector;
|
||||
import dagger.android.DaggerApplication;
|
||||
import io.github.inflationx.calligraphy3.CalligraphyConfig;
|
||||
import io.github.inflationx.calligraphy3.CalligraphyInterceptor;
|
||||
import io.github.inflationx.viewpump.ViewPump;
|
||||
import me.gilo.wc.di.DaggerAppComponent;
|
||||
|
||||
public class WcApp extends DaggerApplication {
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
ViewPump.init(ViewPump.builder()
|
||||
.addInterceptor(new CalligraphyInterceptor(
|
||||
new CalligraphyConfig.Builder()
|
||||
.setDefaultFontPath("fonts/GT-America-Regular.otf")
|
||||
.setFontAttrId(R.attr.fontPath)
|
||||
.build()))
|
||||
.build());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
|
||||
return DaggerAppComponent.create();
|
||||
}
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.CartViewHolder;
|
||||
import me.gilo.wc.adapter.viewholder.CategoryViewHolder;
|
||||
import me.gilo.wc.models.CartLineItem;
|
||||
import me.gilo.woodroid.models.CartItem;
|
||||
import me.gilo.woodroid.models.Category;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CartAdapter extends RecyclerView.Adapter<CartViewHolder> {
|
||||
private List<CartLineItem> cartLineItems;
|
||||
|
||||
public CartAdapter(List<CartLineItem> cartLineItems) {
|
||||
this.cartLineItems = cartLineItems;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new CartViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_cart_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(CartViewHolder holder, int position) {
|
||||
holder.renderView(cartLineItems.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return cartLineItems.size() == 0 ? 0 : cartLineItems.size();
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.CategoryViewHolder;
|
||||
import me.gilo.woodroid.models.Category;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CategoryAdapter extends RecyclerView.Adapter<CategoryViewHolder> {
|
||||
private List<Category> categories;
|
||||
|
||||
public CategoryAdapter(List<Category> categories) {
|
||||
this.categories = categories;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new CategoryViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_category_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(CategoryViewHolder holder, int position) {
|
||||
holder.renderView(categories.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return categories.size() == 0 ? 0 : categories.size();
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.CouponViewHolder;
|
||||
import me.gilo.woodroid.models.Coupon;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CouponAdapter extends RecyclerView.Adapter<CouponViewHolder> {
|
||||
private List<Coupon> coupons;
|
||||
|
||||
public CouponAdapter(List<Coupon> coupons) {
|
||||
this.coupons = coupons;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CouponViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new CouponViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_coupon_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(CouponViewHolder holder, int position) {
|
||||
holder.renderView(coupons.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return coupons.size() == 0 ? 0 : coupons.size();
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.ProductViewHolder;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class HomeProductAdapter extends RecyclerView.Adapter<ProductViewHolder> {
|
||||
private List<Product> products;
|
||||
|
||||
public HomeProductAdapter(List<Product> products) {
|
||||
this.products = products;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new ProductViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_home_product_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ProductViewHolder holder, int position) {
|
||||
holder.renderView(products.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return products.size() == 0 ? 0 : products.size();
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.ProductViewHolder;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ListAdapter extends RecyclerView.Adapter<ProductViewHolder> {
|
||||
private List<Product> products;
|
||||
|
||||
public ListAdapter(List<Product> products) {
|
||||
this.products = products;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new ProductViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_product_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ProductViewHolder holder, int position) {
|
||||
holder.renderView(products.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return products.size() == 0 ? 0 : products.size();
|
||||
}
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.MenuViewHolder;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class MenuAdapter extends RecyclerView.Adapter<MenuViewHolder> {
|
||||
private List<String> titles;
|
||||
|
||||
public MenuAdapter( List<String> titles) {
|
||||
this.titles = titles;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new MenuViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_menu_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(MenuViewHolder holder, int position) {
|
||||
holder.renderView(titles.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return titles.size() == 0 ? 0 : titles.size();
|
||||
}
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.CategoryViewHolder;
|
||||
import me.gilo.wc.adapter.viewholder.OrderViewHolder;
|
||||
import me.gilo.woodroid.models.Category;
|
||||
import me.gilo.woodroid.models.Order;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class OrderAdapter extends RecyclerView.Adapter<OrderViewHolder> {
|
||||
private List<Order> orders;
|
||||
|
||||
public OrderAdapter(List<Order> orders) {
|
||||
this.orders = orders;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new OrderViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_order_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(OrderViewHolder holder, int position) {
|
||||
holder.renderView(orders.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return orders.size() == 0 ? 0 : orders.size();
|
||||
}
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.MenuViewHolder;
|
||||
import me.gilo.wc.adapter.viewholder.ProductViewHolder;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ProductAdapter extends RecyclerView.Adapter<ProductViewHolder> {
|
||||
private List<Product> products;
|
||||
|
||||
public ProductAdapter(List<Product> products) {
|
||||
this.products = products;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new ProductViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_product_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ProductViewHolder holder, int position) {
|
||||
holder.renderView(products.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return products.size() == 0 ? 0 : products.size();
|
||||
}
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
package me.gilo.wc.adapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.adapter.viewholder.ProductReviewViewHolder;
|
||||
import me.gilo.wc.adapter.viewholder.ProductViewHolder;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
import me.gilo.woodroid.models.ProductReview;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ProductReviewAdapter extends RecyclerView.Adapter<ProductReviewViewHolder> {
|
||||
private List<ProductReview> reviews;
|
||||
|
||||
public ProductReviewAdapter(List<ProductReview> reviews) {
|
||||
this.reviews = reviews;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProductReviewViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return new ProductReviewViewHolder(parent.getContext(), LayoutInflater.from(parent.getContext()).inflate(R.layout.single_product_review, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ProductReviewViewHolder holder, int position) {
|
||||
holder.renderView(reviews.get(position));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return reviews.size() == 0 ? 0 : reviews.size();
|
||||
}
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
package me.gilo.wc.adapter.viewholder
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.text.Html
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.ui.product.ShopActivity
|
||||
import me.gilo.woodroid.models.Category
|
||||
import me.gilo.woodroid.models.Order
|
||||
|
||||
class OrderViewHolder(val context: Context, itemView: View) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
|
||||
fun renderView(order: Order) {
|
||||
val tvTitle = itemView.findViewById<TextView>(R.id.tvTitle)
|
||||
tvTitle.text = order.orderNumber
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
package me.gilo.wc.common;
|
||||
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import android.support.annotation.NonNull;
|
||||
import com.google.android.gms.tasks.OnCompleteListener;
|
||||
import com.google.android.gms.tasks.Task;
|
||||
|
||||
|
||||
public final class CompletionGenericLiveData<T> extends LiveData<Resource<T>> implements OnCompleteListener<T> {
|
||||
|
||||
|
||||
public CompletionGenericLiveData() {
|
||||
setValue(new Resource<>(Status.LOADING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onComplete(@NonNull Task<T> task) {
|
||||
if (task.isSuccessful()) {
|
||||
setValue(new Resource<T>(task.getResult()));
|
||||
} else {
|
||||
setValue(new Resource<>(task.getException()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
package me.gilo.wc.common;
|
||||
|
||||
public class NetworkException extends Exception{
|
||||
|
||||
public NetworkException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public NetworkException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public NetworkException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public NetworkException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
@ -1,58 +0,0 @@
|
||||
package me.gilo.wc.di;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.android.ContributesAndroidInjector;
|
||||
import me.gilo.raison.ui.user.onboarding.SignInActivity;
|
||||
import me.gilo.raison.ui.user.onboarding.SignUpActivity;
|
||||
import me.gilo.wc.MainActivity;
|
||||
import me.gilo.wc.ui.WooDroidActivity;
|
||||
import me.gilo.wc.ui.customer.BasicCustomerDetailsActivity;
|
||||
import me.gilo.wc.ui.customer.BillingAddressActivity;
|
||||
import me.gilo.wc.ui.customer.ProfileActivity;
|
||||
import me.gilo.wc.ui.customer.ShippingAddressActivity;
|
||||
import me.gilo.wc.ui.home.HomeActivity;
|
||||
import me.gilo.wc.ui.onboarding.AnonymousSignInActivity;
|
||||
import me.gilo.wc.ui.product.CartActivity;
|
||||
import me.gilo.wc.ui.product.ProductActivity;
|
||||
import me.gilo.wc.ui.product.ShopActivity;
|
||||
|
||||
@Module
|
||||
abstract class ActivitiesModule {
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract MainActivity contributesMainActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract ShopActivity contributesShopActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract ProductActivity contributesProductActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract HomeActivity contributesHomeActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract SignInActivity contributesSignInActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract SignUpActivity contributesSignUpActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract BasicCustomerDetailsActivity contributesBasicCustomerDetailsActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract BillingAddressActivity contributesBillingAddressActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract ShippingAddressActivity contributesShippingAddressActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract CartActivity contributesCartActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract ProfileActivity contributesProfileActivity();
|
||||
|
||||
@ContributesAndroidInjector
|
||||
abstract AnonymousSignInActivity contributesAnonymousSignInActivity();
|
||||
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
package me.gilo.wc.di;
|
||||
|
||||
|
||||
import dagger.Component;
|
||||
import dagger.android.AndroidInjector;
|
||||
import dagger.android.DaggerApplication;
|
||||
import dagger.android.support.AndroidSupportInjectionModule;
|
||||
import me.gilo.wc.WcApp;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
||||
@Singleton
|
||||
@Component(modules = {
|
||||
AndroidSupportInjectionModule.class,
|
||||
ViewModelModule.class,
|
||||
FirebaseModule.class,
|
||||
ActivitiesModule.class,
|
||||
AppModule.class
|
||||
})
|
||||
interface AppComponent extends AndroidInjector<DaggerApplication> {
|
||||
|
||||
void inject(WcApp app);
|
||||
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
package me.gilo.wc.di;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import me.gilo.wc.WcApp;
|
||||
import me.gilo.woodroid.Woocommerce;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@Module
|
||||
public class AppModule {
|
||||
|
||||
WcApp app;
|
||||
|
||||
void AppModule(WcApp application) {
|
||||
app = application;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
WcApp providesApplication() {
|
||||
return app;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Woocommerce providesWoocommerce() {
|
||||
Woocommerce woocommerce = Woocommerce.Builder()
|
||||
.setSiteUrl("http://157.230.131.179")
|
||||
.setApiVersion(Woocommerce.API_V3)
|
||||
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
|
||||
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
|
||||
.build();
|
||||
|
||||
return woocommerce;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
package me.gilo.wc.di;
|
||||
|
||||
import com.google.firebase.firestore.CollectionReference;
|
||||
import com.google.firebase.firestore.FirebaseFirestore;
|
||||
import com.google.firebase.storage.FirebaseStorage;
|
||||
import com.google.firebase.storage.StorageReference;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
||||
@Module
|
||||
class FirebaseModule {
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
FirebaseFirestore providesFirestore() {
|
||||
FirebaseFirestore db = FirebaseFirestore.getInstance();
|
||||
return db;
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named("storage")
|
||||
StorageReference providesStorage() {
|
||||
return FirebaseStorage.getInstance().getReference();
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named("users")
|
||||
CollectionReference providesUsers() {
|
||||
return getFirestoreInstance().collection("users");
|
||||
}
|
||||
|
||||
FirebaseFirestore getFirestoreInstance(){
|
||||
FirebaseFirestore db = FirebaseFirestore.getInstance();
|
||||
|
||||
return db;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -1,58 +0,0 @@
|
||||
package me.gilo.wc.di;
|
||||
|
||||
import android.arch.lifecycle.ViewModel;
|
||||
import android.arch.lifecycle.ViewModelProvider;
|
||||
import com.google.firebase.firestore.CollectionReference;
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import me.gilo.wc.utils.ViewModelFactory;
|
||||
import me.gilo.wc.viewmodels.*;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
@Module
|
||||
public abstract class ViewModelModule {
|
||||
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(UserViewModel.class)
|
||||
abstract ViewModel bindUserViewModel(UserViewModel viewModel);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(ProductViewModel.class)
|
||||
abstract ViewModel bindProductViewModel(ProductViewModel viewModel);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(CategoryViewModel.class)
|
||||
abstract ViewModel bindCategoryViewModel(CategoryViewModel viewModel);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(CustomerViewModel.class)
|
||||
abstract ViewModel bindCustomerViewModel(CustomerViewModel viewModel);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(CartViewModel.class)
|
||||
abstract ViewModel bindCartViewModel(CartViewModel viewModel);
|
||||
|
||||
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(ReviewViewModel.class)
|
||||
abstract ViewModel bindReviewViewModel(ReviewViewModel viewModel);
|
||||
|
||||
@Binds
|
||||
abstract ViewModelProvider.Factory bindViewModelFactory(ViewModelFactory factory);
|
||||
|
||||
|
||||
}
|
||||
@ -1,113 +0,0 @@
|
||||
package me.gilo.wc.repo;
|
||||
|
||||
|
||||
import android.arch.lifecycle.Observer;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.Log;
|
||||
import com.google.android.gms.tasks.OnCompleteListener;
|
||||
import com.google.android.gms.tasks.OnSuccessListener;
|
||||
import com.google.android.gms.tasks.Task;
|
||||
import com.google.firebase.auth.FirebaseAuth;
|
||||
import com.google.firebase.firestore.*;
|
||||
import com.google.firebase.storage.StorageReference;
|
||||
import com.google.firebase.storage.UploadTask;
|
||||
import me.gilo.wc.common.CompletionGenericLiveData;
|
||||
import me.gilo.wc.common.QueryLiveData;
|
||||
import me.gilo.wc.common.WooLiveData;
|
||||
import me.gilo.wc.models.CartLineItem;
|
||||
import me.gilo.wc.utils.AppUtils;
|
||||
import me.gilo.woodroid.Woocommerce;
|
||||
import me.gilo.woodroid.models.LineItem;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class CartRepository {
|
||||
|
||||
@Inject
|
||||
Woocommerce woocommerce;
|
||||
|
||||
private final CollectionReference cart;
|
||||
|
||||
@Inject
|
||||
public CartRepository() {
|
||||
this.cart = FirebaseFirestore.getInstance()
|
||||
.collection("users")
|
||||
.document(FirebaseAuth.getInstance().getCurrentUser().getUid())
|
||||
.collection("cart");
|
||||
|
||||
}
|
||||
|
||||
public QueryLiveData<CartLineItem> cart() {
|
||||
return new QueryLiveData<>(cart, CartLineItem.class);
|
||||
}
|
||||
|
||||
public CompletionGenericLiveData<Void> deleteItem(CartLineItem cartLineItem) {
|
||||
final CompletionGenericLiveData<Void> completion = new CompletionGenericLiveData();
|
||||
cart.document(cartLineItem.getId()).delete().addOnCompleteListener(completion);
|
||||
|
||||
return completion;
|
||||
}
|
||||
|
||||
public CompletionGenericLiveData<Void> setQuantity(CartLineItem cartLineItem, int quantity) {
|
||||
final CompletionGenericLiveData<Void> completion = new CompletionGenericLiveData();
|
||||
cartLineItem.setQuantity(quantity);
|
||||
|
||||
cart.document(cartLineItem.getId()).set(cartLineItem).addOnCompleteListener(completion);
|
||||
|
||||
return completion;
|
||||
}
|
||||
|
||||
public CompletionGenericLiveData<Void> deleteItems() {
|
||||
final CompletionGenericLiveData<Void> completion = new CompletionGenericLiveData();
|
||||
deleteCartItems().addOnCompleteListener(completion);
|
||||
return completion;
|
||||
}
|
||||
|
||||
|
||||
private Task<Void> deleteCartItems() {
|
||||
return cart.getFirestore().runTransaction(transaction -> {
|
||||
cart.get().addOnCompleteListener(task -> {
|
||||
if (task.isSuccessful()) {
|
||||
for (QueryDocumentSnapshot document : task.getResult()) {
|
||||
cart.document(document.getId()).delete();
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
});
|
||||
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public CompletionGenericLiveData<DocumentReference> addToCart(Product product) {
|
||||
final CompletionGenericLiveData<DocumentReference> completion = new CompletionGenericLiveData();
|
||||
|
||||
CartLineItem lineItem = new CartLineItem();
|
||||
lineItem.setProductId(product.getId());
|
||||
lineItem.setProduct(product);
|
||||
lineItem.setQuantity(1);
|
||||
|
||||
cart.add(lineItem).addOnCompleteListener(completion);
|
||||
|
||||
return completion;
|
||||
|
||||
}
|
||||
|
||||
public WooLiveData<Map<String, LineItem>> cart(Context context) {
|
||||
final WooLiveData<Map<String, LineItem>> callBack = new WooLiveData();
|
||||
woocommerce.CartRepository(context).cart().enqueue(callBack);
|
||||
|
||||
return callBack;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
package me.gilo.wc.repo;
|
||||
|
||||
|
||||
import me.gilo.wc.common.WooLiveData;
|
||||
import me.gilo.woodroid.Woocommerce;
|
||||
import me.gilo.woodroid.models.Category;
|
||||
import me.gilo.woodroid.models.filters.ProductCategoryFilter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
|
||||
public class CategoryRepository {
|
||||
|
||||
@Inject
|
||||
Woocommerce woocommerce;
|
||||
|
||||
@Inject
|
||||
public CategoryRepository() {
|
||||
}
|
||||
|
||||
|
||||
public WooLiveData<Category> create(Category category) {
|
||||
final WooLiveData<Category> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.CategoryRepository().create(category).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
|
||||
public WooLiveData<Category> category(int id) {
|
||||
final WooLiveData<Category> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.CategoryRepository().category(id).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<List<Category>> categories() {
|
||||
final WooLiveData<List<Category>> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.CategoryRepository().categories().enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<List<Category>> categories(ProductCategoryFilter productCategoryFilter) {
|
||||
final WooLiveData<List<Category>> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.CategoryRepository().categories(productCategoryFilter).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<Category> update(int id, Category category) {
|
||||
final WooLiveData<Category> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.CategoryRepository().update(id, category).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<Category> delete(int id) {
|
||||
final WooLiveData<Category> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.CategoryRepository().delete(id).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<Category> delete(int id, boolean force) {
|
||||
final WooLiveData<Category> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.CategoryRepository().delete(id, force).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -1,83 +0,0 @@
|
||||
package me.gilo.wc.repo;
|
||||
|
||||
|
||||
import com.google.firebase.auth.FirebaseAuth;
|
||||
import me.gilo.wc.common.WooLiveData;
|
||||
import me.gilo.woodroid.Woocommerce;
|
||||
import me.gilo.woodroid.models.Customer;
|
||||
import me.gilo.woodroid.models.Customer;
|
||||
import me.gilo.woodroid.models.filters.CustomerFilter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
|
||||
public class CustomerRepository {
|
||||
|
||||
@Inject
|
||||
Woocommerce woocommerce;
|
||||
|
||||
|
||||
@Inject
|
||||
public CustomerRepository() {
|
||||
|
||||
}
|
||||
|
||||
public WooLiveData<Customer> create(Customer customer) {
|
||||
final WooLiveData<Customer> callBack = new WooLiveData();
|
||||
woocommerce.CustomerRepository().create(customer).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<List<Customer>> currentCustomer() {
|
||||
final WooLiveData<List<Customer>> callBack = new WooLiveData();
|
||||
CustomerFilter customerFilter = new CustomerFilter();
|
||||
customerFilter.setEmail(FirebaseAuth.getInstance().getCurrentUser().getEmail());
|
||||
|
||||
woocommerce.CustomerRepository().customers(customerFilter).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
|
||||
public WooLiveData<Customer> customer(int id) {
|
||||
final WooLiveData<Customer> callBack = new WooLiveData();
|
||||
woocommerce.CustomerRepository().customer(id).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<List<Customer>> customers() {
|
||||
final WooLiveData<List<Customer>> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.CustomerRepository().customers().enqueue(callBack);
|
||||
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<List<Customer>> customers(CustomerFilter customerFilter) {
|
||||
final WooLiveData<List<Customer>> callBack = new WooLiveData();
|
||||
woocommerce.CustomerRepository().customers(customerFilter).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<Customer> update(int id, Customer customer) {
|
||||
final WooLiveData<Customer> callBack = new WooLiveData();
|
||||
woocommerce.CustomerRepository().update(id, customer).enqueue(callBack);
|
||||
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<Customer> delete(int id) {
|
||||
final WooLiveData<Customer> callBack = new WooLiveData();
|
||||
woocommerce.CustomerRepository().delete(id).enqueue(callBack);
|
||||
|
||||
return callBack;
|
||||
}
|
||||
|
||||
public WooLiveData<Customer> delete(int id, boolean force) {
|
||||
final WooLiveData<Customer> callBack = new WooLiveData();
|
||||
woocommerce.CustomerRepository().delete(id, force).enqueue(callBack);
|
||||
|
||||
return callBack;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -1,111 +0,0 @@
|
||||
package me.gilo.wc.repo;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.Log;
|
||||
import com.google.android.gms.tasks.Continuation;
|
||||
import com.google.android.gms.tasks.OnFailureListener;
|
||||
import com.google.android.gms.tasks.Task;
|
||||
import com.google.firebase.firestore.CollectionReference;
|
||||
import com.google.firebase.firestore.DocumentReference;
|
||||
import com.google.firebase.firestore.DocumentSnapshot;
|
||||
import com.google.firebase.firestore.FirebaseFirestore;
|
||||
import me.gilo.wc.models.Identifiable;
|
||||
import me.gilo.wc.models.Repository;
|
||||
|
||||
|
||||
/**
|
||||
* Manages data access for Firebase
|
||||
*/
|
||||
public class FirebaseRepository<TEntity extends Identifiable<String>> implements Repository<TEntity, String> {
|
||||
|
||||
private static final String TAG = "FirebaseRepository";
|
||||
|
||||
private final Class<TEntity> entityClass;
|
||||
|
||||
private final CollectionReference collectionReference;
|
||||
private final String collectionName;
|
||||
|
||||
|
||||
public FirebaseRepository(Class<TEntity> entityClass, String collectionName) {
|
||||
this.collectionName = collectionName;
|
||||
this.entityClass = entityClass;
|
||||
|
||||
FirebaseFirestore db = FirebaseFirestore.getInstance();
|
||||
this.collectionReference = db.collection(this.collectionName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task<Boolean> exists(final String documentName) {
|
||||
DocumentReference documentReference = collectionReference.document(documentName);
|
||||
Log.i(TAG, "Checking existence of '" + documentName + "' in '" + collectionName + "'.");
|
||||
|
||||
return documentReference.get().continueWith(new Continuation<DocumentSnapshot, Boolean>() {
|
||||
@Override
|
||||
public Boolean then(@NonNull Task<DocumentSnapshot> task) {
|
||||
Log.d(TAG,"Checking if '" + documentName + "' exists in '" + collectionName +"'.");
|
||||
return task.getResult().exists();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task<TEntity> get(String id) {
|
||||
final String documentName = id;
|
||||
DocumentReference documentReference = collectionReference.document(documentName);
|
||||
Log.i(TAG, "Getting '" + documentName + "' in '" + collectionName + "'.");
|
||||
|
||||
return documentReference.get().continueWith(new Continuation<DocumentSnapshot, TEntity>() {
|
||||
@Override
|
||||
public TEntity then(@NonNull Task<DocumentSnapshot> task) throws Exception {
|
||||
DocumentSnapshot documentSnapshot = task.getResult();
|
||||
if (documentSnapshot.exists()) {
|
||||
return documentSnapshot.toObject(entityClass);
|
||||
} else {
|
||||
Log.d(TAG, "Document '" + documentName + "' does not exist in '" + collectionName + "'.");
|
||||
return entityClass.newInstance();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task<Void> create(TEntity entity) {
|
||||
final String documentName = entity.getEntityKey();
|
||||
DocumentReference documentReference = collectionReference.document(documentName);
|
||||
Log.i(TAG, "Creating '" + documentName + "' in '" + collectionName + "'.");
|
||||
return documentReference.set(entity).addOnFailureListener(new OnFailureListener() {
|
||||
@Override
|
||||
public void onFailure(@NonNull Exception e) {
|
||||
Log.d(TAG, "There was an error creating '" + documentName + "' in '" + collectionName + "'!", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task<Void> update(TEntity entity) {
|
||||
final String documentName = entity.getEntityKey();
|
||||
DocumentReference documentReference = collectionReference.document(documentName);
|
||||
Log.i(TAG, "Updating '" + documentName + "' in '" + collectionName + "'.");
|
||||
|
||||
return documentReference.set(entity).addOnFailureListener(new OnFailureListener() {
|
||||
@Override
|
||||
public void onFailure(@NonNull Exception e) {
|
||||
Log.d(TAG, "There was an error updating '" + documentName + "' in '" + collectionName + "'.", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task<Void> delete(final String documentName) {
|
||||
DocumentReference documentReference = collectionReference.document(documentName);
|
||||
Log.i(TAG, "Deleting '" + documentName + "' in '" + collectionName + "'.");
|
||||
|
||||
return documentReference.delete().addOnFailureListener(new OnFailureListener() {
|
||||
@Override
|
||||
public void onFailure(@NonNull Exception e) {
|
||||
Log.d(TAG, "There was an error deleting '" + documentName + "' in '" + collectionName + "'.", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,50 +0,0 @@
|
||||
package me.gilo.wc.ui
|
||||
|
||||
import android.arch.lifecycle.ViewModel
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.Snackbar
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.widget.Toast
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper
|
||||
import me.gilo.wc.R
|
||||
|
||||
import kotlinx.android.synthetic.main.activity_basic_customer_details.*
|
||||
import me.gilo.raison.ui.user.onboarding.SignInActivity
|
||||
import me.gilo.wc.common.BaseActivity
|
||||
import me.gilo.wc.ui.state.ProgressDialogFragment
|
||||
import me.gilo.wc.viewmodels.CustomerViewModel
|
||||
import me.gilo.wc.viewmodels.UserViewModel
|
||||
import java.util.regex.Matcher
|
||||
import java.util.regex.Pattern
|
||||
|
||||
abstract class WooDroidActivity<T : ViewModel> : BaseActivity() {
|
||||
|
||||
|
||||
abstract var viewModel : T
|
||||
private lateinit var progressDialog: ProgressDialogFragment
|
||||
|
||||
override fun attachBaseContext(newBase: Context) {
|
||||
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
|
||||
}
|
||||
|
||||
fun showLoading() {
|
||||
showLoading("Please wait", "This will only take a second")
|
||||
}
|
||||
|
||||
fun showLoading(title: String, message: String) {
|
||||
val manager = supportFragmentManager
|
||||
progressDialog = ProgressDialogFragment.newInstance(title, message)
|
||||
progressDialog.isCancelable = false
|
||||
progressDialog.show(manager, "progress")
|
||||
}
|
||||
|
||||
fun stopShowingLoading() {
|
||||
progressDialog.dismiss()
|
||||
}
|
||||
|
||||
fun toast(text : String){
|
||||
Toast.makeText(baseContext, text, Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
package me.gilo.wc.ui.onboarding
|
||||
|
||||
import android.arch.lifecycle.Observer
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.Snackbar
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.widget.Toast
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper
|
||||
import me.gilo.wc.R
|
||||
|
||||
import kotlinx.android.synthetic.main.activity_anonymous_sign_in.*
|
||||
import kotlinx.android.synthetic.main.content_sign_in.*
|
||||
import me.gilo.raison.ui.user.onboarding.SignUpActivity
|
||||
import me.gilo.wc.common.BaseActivity
|
||||
import me.gilo.wc.common.Status
|
||||
import me.gilo.wc.ui.WooDroidActivity
|
||||
import me.gilo.wc.ui.home.HomeActivity
|
||||
import me.gilo.wc.ui.state.ProgressDialogFragment
|
||||
import me.gilo.wc.viewmodels.UserViewModel
|
||||
import java.util.regex.Matcher
|
||||
import java.util.regex.Pattern
|
||||
|
||||
class AnonymousSignInActivity : WooDroidActivity<UserViewModel>() {
|
||||
|
||||
|
||||
override lateinit var viewModel : UserViewModel
|
||||
|
||||
override fun attachBaseContext(newBase: Context) {
|
||||
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_anonymous_sign_in)
|
||||
|
||||
viewModel = getViewModel(UserViewModel::class.java)
|
||||
anonymousSignIn()
|
||||
|
||||
}
|
||||
|
||||
private fun anonymousSignIn() {
|
||||
viewModel.anonymousSignIn().observe(this, Observer {
|
||||
response->
|
||||
when (response!!.status()){
|
||||
Status.LOADING ->{
|
||||
showLoading("Setting you up with an account", "This will only take a short while")
|
||||
}
|
||||
|
||||
Status.SUCCESS ->{
|
||||
stopShowingLoading()
|
||||
startActivity(Intent(baseContext, HomeActivity::class.java))
|
||||
|
||||
}
|
||||
|
||||
Status.ERROR ->{
|
||||
stopShowingLoading()
|
||||
Toast.makeText(baseContext, "Something went wrong", Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
Status.EMPTY ->{
|
||||
stopShowingLoading()
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
package me.gilo.wc.ui.order
|
||||
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.Snackbar
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import me.gilo.wc.R
|
||||
|
||||
import kotlinx.android.synthetic.main.activity_my_orders.*
|
||||
|
||||
class MyOrdersActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_my_orders)
|
||||
setSupportActionBar(toolbar)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,56 +0,0 @@
|
||||
package me.gilo.wc.viewmodels;
|
||||
|
||||
import android.arch.lifecycle.ViewModel;
|
||||
import android.content.Context;
|
||||
import com.google.firebase.firestore.DocumentReference;
|
||||
import me.gilo.wc.common.CompletionGenericLiveData;
|
||||
import me.gilo.wc.common.QueryLiveData;
|
||||
import me.gilo.wc.common.WooLiveData;
|
||||
import me.gilo.wc.models.CartLineItem;
|
||||
import me.gilo.wc.repo.CartRepository;
|
||||
import me.gilo.wc.repo.OrderRepository;
|
||||
import me.gilo.wc.repo.ProductRepository;
|
||||
import me.gilo.woodroid.models.LineItem;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
import me.gilo.woodroid.models.ProductReview;
|
||||
import me.gilo.woodroid.models.filters.ProductFilter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public final class CartViewModel extends ViewModel {
|
||||
|
||||
private final CartRepository cartRepository;
|
||||
|
||||
@Inject
|
||||
CartViewModel(CartRepository cartRepository) {
|
||||
this.cartRepository = cartRepository;
|
||||
}
|
||||
|
||||
public CompletionGenericLiveData<DocumentReference> addToCart(Product product) {
|
||||
return cartRepository.addToCart(product);
|
||||
}
|
||||
|
||||
public QueryLiveData<CartLineItem> cart() {
|
||||
return cartRepository.cart();
|
||||
}
|
||||
|
||||
public CompletionGenericLiveData<Void> deleteItem(CartLineItem cartLineItem) {
|
||||
return cartRepository.deleteItem(cartLineItem);
|
||||
}
|
||||
|
||||
public CompletionGenericLiveData<Void> deleteAllCartItems() {
|
||||
return cartRepository.deleteItems();
|
||||
}
|
||||
|
||||
public CompletionGenericLiveData<Void> setQuantity(CartLineItem cartLineItem, int quantity) {
|
||||
return cartRepository.setQuantity(cartLineItem, quantity);
|
||||
}
|
||||
|
||||
public WooLiveData<Map<String, LineItem>> cart(Context context) {
|
||||
return cartRepository.cart(context);
|
||||
}
|
||||
|
||||
}
|
||||
16
app/src/main/java/me/gilo/woodroid/app/Config.java
Normal file
16
app/src/main/java/me/gilo/woodroid/app/Config.java
Normal file
@ -0,0 +1,16 @@
|
||||
package me.gilo.woodroid.app;
|
||||
|
||||
public class Config {
|
||||
public static String CURRENCY_SYMBOL = "Ksh.";
|
||||
|
||||
public static String siteUrl = "https://gilo.me/store"; //sometimes you need to append /index.php at the end
|
||||
public static String consumerKey = "ck_4ff858c97e1ed097cc24cb95593b2bcc45e835d5";
|
||||
public static String consumerSecret = "cs_24865d302c443dec4a1391e5d2a438ba46e95cb6";
|
||||
|
||||
//sorry guys :( someday I am gonna add live and debug to have this stored somewhere
|
||||
//for now commenting will do
|
||||
// public static String siteUrl = "http://192.168.100.61/shop/index.php";
|
||||
// public static String consumerKey = "ck_da34628a4a69128001876492b842be4cd3c76bf8";
|
||||
// public static String consumerSecret = "cs_c3c70248288a60bc21a0cddc81acdc018df1632d";
|
||||
|
||||
}
|
||||
@ -1,33 +1,27 @@
|
||||
package me.gilo.wc
|
||||
package me.gilo.woodroid.app
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.util.Log
|
||||
import com.google.firebase.auth.FirebaseAuth
|
||||
import me.gilo.raison.ui.user.onboarding.SignInActivity
|
||||
import me.gilo.raison.ui.user.onboarding.SignUpActivity
|
||||
import me.gilo.wc.ui.customer.BasicCustomerDetailsActivity
|
||||
import me.gilo.wc.ui.customer.BillingAddressActivity
|
||||
import me.gilo.wc.ui.customer.ShippingAddressActivity
|
||||
import me.gilo.wc.ui.home.HomeActivity
|
||||
import me.gilo.wc.ui.onboarding.AnonymousSignInActivity
|
||||
import me.gilo.wc.ui.product.ProductActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.ui.home.HomeActivity
|
||||
import me.gilo.woodroid.app.ui.onboarding.AnonymousSignInActivity
|
||||
import me.gilo.woodroid.app.ui.order.MyOrdersActivity
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
val TAG = "MainActivity";
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
|
||||
|
||||
if(FirebaseAuth.getInstance().currentUser != null) {
|
||||
if (FirebaseAuth.getInstance().currentUser != null) {
|
||||
startActivity(Intent(baseContext, HomeActivity::class.java))
|
||||
}else{
|
||||
} else {
|
||||
startActivity(Intent(baseContext, AnonymousSignInActivity::class.java))
|
||||
}
|
||||
|
||||
finish()
|
||||
|
||||
}
|
||||
35
app/src/main/java/me/gilo/woodroid/app/WcApp.kt
Normal file
35
app/src/main/java/me/gilo/woodroid/app/WcApp.kt
Normal file
@ -0,0 +1,35 @@
|
||||
package me.gilo.woodroid.app
|
||||
|
||||
import dagger.android.AndroidInjector
|
||||
import dagger.android.DaggerApplication
|
||||
import io.github.inflationx.calligraphy3.CalligraphyConfig
|
||||
import io.github.inflationx.calligraphy3.CalligraphyInterceptor
|
||||
import io.github.inflationx.viewpump.ViewPump
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.di.DaggerAppComponent
|
||||
|
||||
class WcApp : DaggerApplication() {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
||||
ViewPump.init(
|
||||
ViewPump.builder()
|
||||
.addInterceptor(
|
||||
CalligraphyInterceptor(
|
||||
CalligraphyConfig.Builder()
|
||||
.setDefaultFontPath("fonts/GT-America-Regular.otf")
|
||||
.setFontAttrId(R.attr.fontPath)
|
||||
.build()
|
||||
)
|
||||
)
|
||||
.build()
|
||||
)
|
||||
|
||||
|
||||
}
|
||||
|
||||
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
|
||||
return DaggerAppComponent.create()
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.CartViewHolder
|
||||
import me.gilo.woodroid.app.models.CartLineItem
|
||||
|
||||
class CartAdapter(private val cartLineItems: List<CartLineItem>) : RecyclerView.Adapter<CartViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartViewHolder {
|
||||
return CartViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_cart_item, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CartViewHolder, position: Int) {
|
||||
holder.renderView(cartLineItems[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (cartLineItems.isEmpty()) 0 else cartLineItems.size
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.CategoryViewHolder
|
||||
import me.gilo.woodroid.models.Category
|
||||
|
||||
class CategoryAdapter(private val categories: List<Category>) : RecyclerView.Adapter<CategoryViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryViewHolder {
|
||||
return CategoryViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_category_item, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CategoryViewHolder, position: Int) {
|
||||
holder.renderView(categories[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (categories.isEmpty()) 0 else categories.size
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.CouponViewHolder
|
||||
import me.gilo.woodroid.models.Coupon
|
||||
|
||||
class CouponAdapter(private val coupons: List<Coupon>) : RecyclerView.Adapter<CouponViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CouponViewHolder {
|
||||
return CouponViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_coupon_item, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CouponViewHolder, position: Int) {
|
||||
holder.renderView(coupons[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (coupons.size == 0) 0 else coupons.size
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.ProductViewHolder
|
||||
import me.gilo.woodroid.models.Product
|
||||
|
||||
class HomeProductAdapter(private val products: List<Product>) : RecyclerView.Adapter<ProductViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
|
||||
return ProductViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_home_product_item, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
|
||||
holder.renderView(products[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (products.isEmpty()) 0 else products.size
|
||||
}
|
||||
}
|
||||
@ -1,14 +1,14 @@
|
||||
package me.gilo.wc.adapter
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
|
||||
import android.content.Context
|
||||
import android.support.v4.view.PagerAdapter
|
||||
import androidx.viewpager.widget.PagerAdapter
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import com.squareup.picasso.Picasso
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.models.Image
|
||||
|
||||
|
||||
@ -22,12 +22,10 @@ class ImagePagerAdapter(val context: Context, private val images: List<Image>) :
|
||||
val ivImage = layout.findViewById<ImageView>(R.id.ivImage)
|
||||
|
||||
val image = images[position]
|
||||
if (image != null) {
|
||||
Picasso
|
||||
.with(context)
|
||||
.load(image!!.src)
|
||||
.load(image.src)
|
||||
.into(ivImage)
|
||||
}
|
||||
|
||||
collection.addView(layout)
|
||||
return layout
|
||||
@ -0,0 +1,27 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.ProductViewHolder
|
||||
import me.gilo.woodroid.models.Product
|
||||
|
||||
class ListAdapter(private val products: List<Product>) : RecyclerView.Adapter<ProductViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
|
||||
return ProductViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_product_item, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
|
||||
holder.renderView(products[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (products.isEmpty()) 0 else products.size
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.MenuViewHolder
|
||||
|
||||
class MenuAdapter(private val titles: List<String>) : RecyclerView.Adapter<MenuViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MenuViewHolder {
|
||||
return MenuViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_menu_item, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: MenuViewHolder, position: Int) {
|
||||
holder.renderView(titles[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (titles.isEmpty()) 0 else titles.size
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.OrderViewHolder
|
||||
import me.gilo.woodroid.models.Order
|
||||
|
||||
class OrderAdapter(private val orders: List<Order>) : RecyclerView.Adapter<OrderViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderViewHolder {
|
||||
return OrderViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_order_item, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: OrderViewHolder, position: Int) {
|
||||
holder.renderView(orders[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (orders.isEmpty()) 0 else orders.size
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.ProductViewHolder
|
||||
import me.gilo.woodroid.models.Product
|
||||
|
||||
class ProductAdapter(private val products: List<Product>) : RecyclerView.Adapter<ProductViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
|
||||
return ProductViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_product_item, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
|
||||
holder.renderView(products[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (products.isEmpty()) 0 else products.size
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package me.gilo.woodroid.app.adapter
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.viewholder.ProductReviewViewHolder
|
||||
import me.gilo.woodroid.models.ProductReview
|
||||
|
||||
class ProductReviewAdapter(private val reviews: List<ProductReview>) : RecyclerView.Adapter<ProductReviewViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductReviewViewHolder {
|
||||
return ProductReviewViewHolder(
|
||||
parent.context,
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.single_product_review, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ProductReviewViewHolder, position: Int) {
|
||||
holder.renderView(reviews[position])
|
||||
}
|
||||
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (reviews.isEmpty()) 0 else reviews.size
|
||||
}
|
||||
}
|
||||
@ -1,27 +1,19 @@
|
||||
package me.gilo.wc.adapter.viewholder
|
||||
package me.gilo.woodroid.app.adapter.viewholder
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.text.Html
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import com.squareup.picasso.Picasso
|
||||
import me.gilo.woodroid.models.Product
|
||||
import android.text.Spannable
|
||||
import android.text.style.ForegroundColorSpan
|
||||
import android.text.SpannableString
|
||||
import android.graphics.Color
|
||||
import kotlinx.android.synthetic.main.content_product.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.events.AddQuantityEvent
|
||||
import me.gilo.wc.events.LessQuantityEvent
|
||||
import me.gilo.wc.events.ProductEvent
|
||||
import me.gilo.wc.models.CartLineItem
|
||||
import me.gilo.wc.ui.coupon.CouponActivity
|
||||
import me.gilo.wc.ui.product.ProductActivity
|
||||
import me.gilo.woodroid.models.CartItem
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.events.AddQuantityEvent
|
||||
import me.gilo.woodroid.app.events.LessQuantityEvent
|
||||
import me.gilo.woodroid.app.models.CartLineItem
|
||||
import me.gilo.woodroid.app.ui.product.ProductActivity
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
|
||||
|
||||
@ -1,13 +1,12 @@
|
||||
package me.gilo.wc.adapter.viewholder
|
||||
package me.gilo.woodroid.app.adapter.viewholder
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.text.Html
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.ui.product.ShopActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.ui.product.ShopActivity
|
||||
import me.gilo.woodroid.models.Category
|
||||
|
||||
class CategoryViewHolder(val context: Context, itemView: View) :
|
||||
@ -1,13 +1,13 @@
|
||||
package me.gilo.wc.adapter.viewholder
|
||||
package me.gilo.woodroid.app.adapter.viewholder
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.text.Html
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.ui.coupon.CouponActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.ui.coupon.CouponActivity
|
||||
import me.gilo.woodroid.models.Coupon
|
||||
|
||||
class CouponViewHolder(val context: Context, itemView: View) :
|
||||
@ -17,7 +17,7 @@ class CouponViewHolder(val context: Context, itemView: View) :
|
||||
val tvTitle = itemView.findViewById<TextView>(R.id.tvTitle)
|
||||
val tvDescription = itemView.findViewById<TextView>(R.id.tvDescription)
|
||||
|
||||
tvTitle.text = coupon.code.toUpperCase()
|
||||
tvTitle.text = coupon.code?.toUpperCase()
|
||||
tvDescription.text = Html.fromHtml(coupon.description)
|
||||
|
||||
itemView.setOnClickListener{
|
||||
@ -1,13 +1,13 @@
|
||||
package me.gilo.wc.adapter.viewholder;
|
||||
package me.gilo.woodroid.app.adapter.viewholder;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import me.gilo.wc.R;
|
||||
import me.gilo.wc.ui.coupon.CouponsActivity;
|
||||
import me.gilo.wc.ui.product.ShopActivity;
|
||||
import me.gilo.woodroid.app.R;
|
||||
import me.gilo.woodroid.app.ui.coupon.CouponsActivity;
|
||||
import me.gilo.woodroid.app.ui.product.ShopActivity;
|
||||
|
||||
public class MenuViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
package me.gilo.woodroid.app.adapter.viewholder
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.text.SpannableString
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.ui.order.OrderActivity
|
||||
import me.gilo.woodroid.app.utils.DateUtils
|
||||
import me.gilo.woodroid.models.Order
|
||||
|
||||
class OrderViewHolder(val context: Context, itemView: View) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
|
||||
fun renderView(order: Order) {
|
||||
val tvTitle = itemView.findViewById<TextView>(R.id.tvTitle)
|
||||
val tvDescription = itemView.findViewById<TextView>(R.id.tvDescription)
|
||||
val tvPrice = itemView.findViewById<TextView>(R.id.tvPrice)
|
||||
val tvStatus = itemView.findViewById<TextView>(R.id.tvStatus)
|
||||
val tvDate = itemView.findViewById<TextView>(R.id.tvDate)
|
||||
|
||||
|
||||
|
||||
tvTitle.text = "#" + order.orderNumber
|
||||
tvStatus.text = order.status
|
||||
|
||||
tvDate.text = DateUtils.getDateString_shortAndSmart(order.dateCreated)
|
||||
|
||||
tvPrice.text = SpannableString("Ksh${order.total}")
|
||||
|
||||
var description = ""
|
||||
|
||||
for (lineItem in order.lineItems){
|
||||
description += lineItem.name + "(" + lineItem.quantity + "), "
|
||||
}
|
||||
|
||||
|
||||
tvDescription.text = description
|
||||
|
||||
itemView.setOnClickListener{
|
||||
var intent = Intent(context, OrderActivity::class.java)
|
||||
intent.putExtra("orderId", order.id)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -1,18 +1,15 @@
|
||||
package me.gilo.wc.adapter.viewholder
|
||||
package me.gilo.woodroid.app.adapter.viewholder
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.text.Html
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.RatingBar
|
||||
import android.widget.TextView
|
||||
import com.squareup.picasso.Picasso
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.ui.product.ShopActivity
|
||||
import me.gilo.wc.utils.DateUtils
|
||||
import me.gilo.woodroid.models.Category
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.utils.DateUtils
|
||||
import me.gilo.woodroid.models.ProductReview
|
||||
|
||||
class ProductReviewViewHolder(val context: Context, itemView: View) :
|
||||
@ -1,22 +1,17 @@
|
||||
package me.gilo.wc.adapter.viewholder
|
||||
package me.gilo.woodroid.app.adapter.viewholder
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.text.Html
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import com.squareup.picasso.Picasso
|
||||
import me.gilo.woodroid.models.Product
|
||||
import android.text.Spannable
|
||||
import android.text.style.ForegroundColorSpan
|
||||
import android.text.SpannableString
|
||||
import android.graphics.Color
|
||||
import kotlinx.android.synthetic.main.content_product.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.ui.coupon.CouponActivity
|
||||
import me.gilo.wc.ui.product.ProductActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.ui.product.ProductActivity
|
||||
import me.gilo.woodroid.models.Product
|
||||
|
||||
|
||||
class ProductViewHolder(val context: Context, itemView: View) :
|
||||
@ -1,13 +1,12 @@
|
||||
package me.gilo.wc.common;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.arch.lifecycle.ViewModel;
|
||||
import android.arch.lifecycle.ViewModelProvider;
|
||||
import android.arch.lifecycle.ViewModelProviders;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.lifecycle.ViewModelProviders;
|
||||
import android.content.Context;
|
||||
import dagger.android.support.DaggerAppCompatActivity;
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper;
|
||||
import me.gilo.wc.ui.state.ProgressDialogFragment;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package me.gilo.wc.common;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import android.support.annotation.NonNull;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.google.android.gms.tasks.OnCompleteListener;
|
||||
import com.google.android.gms.tasks.Task;
|
||||
import com.google.firebase.firestore.DocumentReference;
|
||||
@ -0,0 +1,21 @@
|
||||
package me.gilo.woodroid.app.common
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import com.google.android.gms.tasks.OnCompleteListener
|
||||
import com.google.android.gms.tasks.Task
|
||||
|
||||
|
||||
class CompletionGenericLiveData<T> : LiveData<Resource<T>>(), OnCompleteListener<T> {
|
||||
init {
|
||||
value = Resource(Status.LOADING)
|
||||
}
|
||||
|
||||
override fun onComplete(task: Task<T>) {
|
||||
if (task.isSuccessful) {
|
||||
setValue(Resource(task.result!!))
|
||||
} else {
|
||||
setValue(Resource(task.exception!!))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package me.gilo.wc.common;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import android.support.annotation.NonNull;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.google.android.gms.tasks.OnCompleteListener;
|
||||
import com.google.android.gms.tasks.Task;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package me.gilo.wc.common;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import com.google.firebase.firestore.*;
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package me.gilo.woodroid.callback;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
public class NetworkException extends Exception{
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package me.gilo.wc.common;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
/**
|
||||
* Created by amrro <amr.elghobary@gmail.com> on 9/15/17.
|
||||
@ -1,9 +1,9 @@
|
||||
package me.gilo.wc.common;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import android.support.annotation.NonNull;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.google.firebase.firestore.*;
|
||||
import me.gilo.wc.models.Model;
|
||||
import me.gilo.woodroid.app.models.Model;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -1,7 +1,7 @@
|
||||
package me.gilo.wc.common;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package me.gilo.woodroid.callback;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
public enum Status {
|
||||
EMPTY,
|
||||
@ -1,6 +1,6 @@
|
||||
package me.gilo.wc.common;
|
||||
package me.gilo.woodroid.app.common;
|
||||
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
@ -0,0 +1,65 @@
|
||||
package me.gilo.woodroid.app.di
|
||||
|
||||
import dagger.Module
|
||||
import dagger.android.ContributesAndroidInjector
|
||||
import me.gilo.raison.ui.user.onboarding.SignInActivity
|
||||
import me.gilo.raison.ui.user.onboarding.SignUpActivity
|
||||
import me.gilo.woodroid.app.MainActivity
|
||||
import me.gilo.woodroid.app.ui.customer.BasicCustomerDetailsActivity
|
||||
import me.gilo.woodroid.app.ui.customer.BillingAddressActivity
|
||||
import me.gilo.woodroid.app.ui.customer.ProfileActivity
|
||||
import me.gilo.woodroid.app.ui.customer.ShippingAddressActivity
|
||||
import me.gilo.woodroid.app.ui.home.HomeActivity
|
||||
import me.gilo.woodroid.app.ui.onboarding.AnonymousSignInActivity
|
||||
import me.gilo.woodroid.app.ui.order.MyOrdersActivity
|
||||
import me.gilo.woodroid.app.ui.order.OrderActivity
|
||||
import me.gilo.woodroid.app.ui.product.CartActivity
|
||||
import me.gilo.woodroid.app.ui.product.ProductActivity
|
||||
import me.gilo.woodroid.app.ui.product.ShopActivity
|
||||
|
||||
@Module
|
||||
internal abstract class ActivitiesModule {
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesMainActivity(): MainActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesShopActivity(): ShopActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesProductActivity(): ProductActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesHomeActivity(): HomeActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesSignInActivity(): SignInActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesSignUpActivity(): SignUpActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesBasicCustomerDetailsActivity(): BasicCustomerDetailsActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesBillingAddressActivity(): BillingAddressActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesShippingAddressActivity(): ShippingAddressActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesCartActivity(): CartActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesProfileActivity(): ProfileActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesAnonymousSignInActivity(): AnonymousSignInActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesMyOrdersActivity(): MyOrdersActivity
|
||||
|
||||
@ContributesAndroidInjector
|
||||
internal abstract fun contributesOrderActivity(): OrderActivity
|
||||
|
||||
}
|
||||
19
app/src/main/java/me/gilo/woodroid/app/di/AppComponent.kt
Normal file
19
app/src/main/java/me/gilo/woodroid/app/di/AppComponent.kt
Normal file
@ -0,0 +1,19 @@
|
||||
package me.gilo.woodroid.app.di
|
||||
|
||||
|
||||
import dagger.Component
|
||||
import dagger.android.AndroidInjector
|
||||
import dagger.android.DaggerApplication
|
||||
import dagger.android.support.AndroidSupportInjectionModule
|
||||
import me.gilo.woodroid.app.WcApp
|
||||
|
||||
import javax.inject.Singleton
|
||||
|
||||
|
||||
@Singleton
|
||||
@Component(modules = [AndroidSupportInjectionModule::class, ViewModelModule::class, FirebaseModule::class, ActivitiesModule::class, AppModule::class])
|
||||
internal interface AppComponent : AndroidInjector<DaggerApplication> {
|
||||
|
||||
fun inject(app: WcApp)
|
||||
|
||||
}
|
||||
46
app/src/main/java/me/gilo/woodroid/app/di/AppModule.kt
Normal file
46
app/src/main/java/me/gilo/woodroid/app/di/AppModule.kt
Normal file
@ -0,0 +1,46 @@
|
||||
package me.gilo.woodroid.app.di
|
||||
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import me.gilo.woodroid.app.Config
|
||||
import me.gilo.woodroid.app.WcApp
|
||||
import me.gilo.woodroid.Woocommerce
|
||||
import me.gilo.woodroid.offlinecart.repo.RoomCartRepository
|
||||
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
class AppModule {
|
||||
|
||||
internal var app: WcApp? = null
|
||||
|
||||
internal fun AppModule(application: WcApp) {
|
||||
app = application
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
internal fun providesApplication(): WcApp {
|
||||
return app!!
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
internal fun providesWoocommerce(): Woocommerce {
|
||||
|
||||
return Woocommerce.Builder()
|
||||
.setSiteUrl(Config.siteUrl)
|
||||
.setApiVersion(Woocommerce.API_V3)
|
||||
.setConsumerKey(Config.consumerKey)
|
||||
.setConsumerSecret(Config.consumerSecret)
|
||||
.build()
|
||||
}
|
||||
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
internal fun providesRoomCartRepository(): RoomCartRepository = RoomCartRepository(app!!.baseContext)
|
||||
|
||||
|
||||
|
||||
}
|
||||
41
app/src/main/java/me/gilo/woodroid/app/di/FirebaseModule.kt
Normal file
41
app/src/main/java/me/gilo/woodroid/app/di/FirebaseModule.kt
Normal file
@ -0,0 +1,41 @@
|
||||
package me.gilo.woodroid.app.di
|
||||
|
||||
import com.google.firebase.firestore.CollectionReference
|
||||
import com.google.firebase.firestore.FirebaseFirestore
|
||||
import com.google.firebase.storage.FirebaseStorage
|
||||
import com.google.firebase.storage.StorageReference
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
|
||||
import javax.inject.Named
|
||||
import javax.inject.Singleton
|
||||
|
||||
|
||||
@Module
|
||||
internal class FirebaseModule {
|
||||
|
||||
private val firestoreInstance: FirebaseFirestore
|
||||
get() = FirebaseFirestore.getInstance()
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
fun providesFirestore(): FirebaseFirestore {
|
||||
return FirebaseFirestore.getInstance()
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named("storage")
|
||||
fun providesStorage(): StorageReference {
|
||||
return FirebaseStorage.getInstance().reference
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named("users")
|
||||
fun providesUsers(): CollectionReference {
|
||||
return firestoreInstance.collection("users")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package me.gilo.wc.di;
|
||||
package me.gilo.woodroid.app.di;
|
||||
|
||||
import android.arch.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import dagger.MapKey;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
55
app/src/main/java/me/gilo/woodroid/app/di/ViewModelModule.kt
Normal file
55
app/src/main/java/me/gilo/woodroid/app/di/ViewModelModule.kt
Normal file
@ -0,0 +1,55 @@
|
||||
package me.gilo.woodroid.app.di
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.multibindings.IntoMap
|
||||
import me.gilo.woodroid.app.utils.ViewModelFactory
|
||||
import me.gilo.woodroid.app.viewmodels.*
|
||||
|
||||
|
||||
@Module
|
||||
abstract class ViewModelModule {
|
||||
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(UserViewModel::class)
|
||||
internal abstract fun bindUserViewModel(viewModel: UserViewModel): ViewModel
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(ProductViewModel::class)
|
||||
internal abstract fun bindProductViewModel(viewModel: ProductViewModel): ViewModel
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(CategoryViewModel::class)
|
||||
internal abstract fun bindCategoryViewModel(viewModel: CategoryViewModel): ViewModel
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(CustomerViewModel::class)
|
||||
internal abstract fun bindCustomerViewModel(viewModel: CustomerViewModel): ViewModel
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(CartViewModel::class)
|
||||
internal abstract fun bindCartViewModel(viewModel: CartViewModel): ViewModel
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(OrderViewModel::class)
|
||||
internal abstract fun bindOrderViewModel(viewModel: OrderViewModel): ViewModel
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(ReviewViewModel::class)
|
||||
internal abstract fun bindReviewViewModel(viewModel: ReviewViewModel): ViewModel
|
||||
|
||||
@Binds
|
||||
internal abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
|
||||
|
||||
|
||||
}
|
||||
@ -1,7 +1,6 @@
|
||||
package me.gilo.wc.events;
|
||||
package me.gilo.woodroid.app.events;
|
||||
|
||||
import me.gilo.wc.models.CartLineItem;
|
||||
import me.gilo.woodroid.models.ProductReview;
|
||||
import me.gilo.woodroid.app.models.CartLineItem;
|
||||
|
||||
public class AddQuantityEvent {
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package me.gilo.wc.events;
|
||||
package me.gilo.woodroid.app.events;
|
||||
|
||||
import me.gilo.wc.models.CartLineItem;
|
||||
import me.gilo.woodroid.models.ProductReview;
|
||||
import me.gilo.woodroid.app.models.CartLineItem;
|
||||
|
||||
public class LessQuantityEvent {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package me.gilo.wc.events;
|
||||
package me.gilo.woodroid.app.events;
|
||||
|
||||
import me.gilo.woodroid.models.Product;
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package me.gilo.wc.events;
|
||||
package me.gilo.woodroid.app.events;
|
||||
|
||||
import me.gilo.woodroid.models.Product;
|
||||
import me.gilo.woodroid.models.ProductReview;
|
||||
|
||||
public class ReviewEvent {
|
||||
@ -1,12 +1,6 @@
|
||||
package me.gilo.wc.models;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import me.gilo.woodroid.models.Metum;
|
||||
package me.gilo.woodroid.app.models;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class CartLineItem extends Model{
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package me.gilo.wc.models;
|
||||
package me.gilo.woodroid.app.models;
|
||||
|
||||
import com.google.firebase.firestore.Exclude;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package me.gilo.wc.models;
|
||||
package me.gilo.woodroid.app.models;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.google.firebase.firestore.IgnoreExtraProperties;
|
||||
import com.google.firebase.firestore.ServerTimestamp;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package me.gilo.wc.models;
|
||||
package me.gilo.woodroid.app.models;
|
||||
|
||||
import com.google.android.gms.tasks.Task;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package me.gilo.wc.models;
|
||||
package me.gilo.woodroid.app.models;
|
||||
|
||||
public class User{
|
||||
String id;
|
||||
@ -0,0 +1,77 @@
|
||||
package me.gilo.woodroid.app.repo
|
||||
|
||||
|
||||
import android.content.Context
|
||||
import com.google.android.gms.tasks.Task
|
||||
import com.google.firebase.auth.FirebaseAuth
|
||||
import com.google.firebase.firestore.CollectionReference
|
||||
import com.google.firebase.firestore.DocumentReference
|
||||
import com.google.firebase.firestore.FirebaseFirestore
|
||||
import me.gilo.woodroid.app.common.CompletionGenericLiveData
|
||||
import me.gilo.woodroid.app.common.QueryLiveData
|
||||
import me.gilo.woodroid.app.common.WooLiveData
|
||||
import me.gilo.woodroid.app.models.CartLineItem
|
||||
import me.gilo.woodroid.Woocommerce
|
||||
import me.gilo.woodroid.core.cart.Cart
|
||||
import me.gilo.woodroid.core.cart.CartItem
|
||||
|
||||
import me.gilo.woodroid.models.Product
|
||||
import me.gilo.woodroid.offlinecart.repo.RoomCartRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
open class CartRepository @Inject
|
||||
constructor() {
|
||||
|
||||
@Inject
|
||||
lateinit var woocommerce: Woocommerce
|
||||
|
||||
|
||||
private val cart: CollectionReference = FirebaseFirestore.getInstance()
|
||||
.collection("users")
|
||||
.document(FirebaseAuth.getInstance().currentUser?.uid ?: "0")
|
||||
.collection("cart")
|
||||
|
||||
fun cart(): QueryLiveData<CartLineItem> {
|
||||
return QueryLiveData(cart, CartLineItem::class.java)
|
||||
}
|
||||
|
||||
fun deleteItem(cartLineItem: CartLineItem): CompletionGenericLiveData<Void> {
|
||||
val completion = CompletionGenericLiveData<Void>()
|
||||
cart.document(cartLineItem.getId()).delete().addOnCompleteListener(completion)
|
||||
|
||||
return completion
|
||||
}
|
||||
|
||||
fun setQuantity(cartLineItem: CartLineItem, quantity: Int): CompletionGenericLiveData<Void> {
|
||||
val completion = CompletionGenericLiveData<Void>()
|
||||
cartLineItem.setQuantity(quantity)
|
||||
|
||||
cart.document(cartLineItem.getId()).set(cartLineItem).addOnCompleteListener(completion)
|
||||
|
||||
return completion
|
||||
}
|
||||
|
||||
fun deleteItems(): CompletionGenericLiveData<Void> {
|
||||
val completion = CompletionGenericLiveData<Void>()
|
||||
deleteCartItems().addOnCompleteListener(completion)
|
||||
return completion
|
||||
}
|
||||
|
||||
|
||||
private fun deleteCartItems(): Task<Void> {
|
||||
return cart.firestore.runTransaction {
|
||||
cart.get().addOnCompleteListener { task ->
|
||||
if (task.isSuccessful) {
|
||||
for (document in task.result!!) {
|
||||
cart.document(document.id).delete()
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
}
|
||||
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
package me.gilo.woodroid.app.repo
|
||||
|
||||
|
||||
import me.gilo.woodroid.app.common.WooLiveData
|
||||
import me.gilo.woodroid.Woocommerce
|
||||
import me.gilo.woodroid.models.Category
|
||||
import me.gilo.woodroid.models.filters.ProductCategoryFilter
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
class CategoryRepository @Inject
|
||||
constructor() {
|
||||
|
||||
@Inject
|
||||
lateinit var woocommerce: Woocommerce
|
||||
|
||||
|
||||
fun create(category: Category): WooLiveData<Category> {
|
||||
val callBack = WooLiveData<Category>()
|
||||
|
||||
woocommerce.CategoryRepository().create(category).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
|
||||
fun category(id: Int): WooLiveData<Category> {
|
||||
val callBack = WooLiveData<Category>()
|
||||
|
||||
woocommerce.CategoryRepository().category(id).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun categories(): WooLiveData<List<Category>> {
|
||||
val callBack = WooLiveData<List<Category>>()
|
||||
|
||||
woocommerce.CategoryRepository().categories().enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun categories(productCategoryFilter: ProductCategoryFilter): WooLiveData<List<Category>> {
|
||||
val callBack = WooLiveData<List<Category>>()
|
||||
|
||||
woocommerce.CategoryRepository().categories(productCategoryFilter).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun update(id: Int, category: Category): WooLiveData<Category> {
|
||||
val callBack = WooLiveData<Category>()
|
||||
|
||||
woocommerce.CategoryRepository().update(id, category).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun delete(id: Int): WooLiveData<Category> {
|
||||
val callBack = WooLiveData<Category>()
|
||||
|
||||
woocommerce.CategoryRepository().delete(id).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun delete(id: Int, force: Boolean): WooLiveData<Category> {
|
||||
val callBack = WooLiveData<Category>()
|
||||
|
||||
woocommerce.CategoryRepository().delete(id, force).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
package me.gilo.woodroid.app.repo
|
||||
|
||||
|
||||
import com.google.firebase.auth.FirebaseAuth
|
||||
import me.gilo.woodroid.app.common.WooLiveData
|
||||
import me.gilo.woodroid.Woocommerce
|
||||
import me.gilo.woodroid.models.Customer
|
||||
import me.gilo.woodroid.models.filters.CustomerFilter
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
class CustomerRepository @Inject
|
||||
constructor() {
|
||||
|
||||
@Inject
|
||||
lateinit var woocommerce: Woocommerce
|
||||
|
||||
fun create(customer: Customer): WooLiveData<Customer> {
|
||||
val callBack = WooLiveData<Customer>()
|
||||
woocommerce.CustomerRepository().create(customer).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun currentCustomer(): WooLiveData<List<Customer>> {
|
||||
val callBack = WooLiveData<List<Customer>>()
|
||||
val customerFilter = CustomerFilter()
|
||||
customerFilter.setEmail(FirebaseAuth.getInstance().currentUser!!.email!!)
|
||||
|
||||
woocommerce.CustomerRepository().customers(customerFilter).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
|
||||
fun customer(id: Int): WooLiveData<Customer> {
|
||||
val callBack = WooLiveData<Customer>()
|
||||
woocommerce.CustomerRepository().customer(id).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun customers(): WooLiveData<List<Customer>> {
|
||||
val callBack = WooLiveData<List<Customer>>()
|
||||
|
||||
woocommerce.CustomerRepository().customers().enqueue(callBack)
|
||||
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun customers(customerFilter: CustomerFilter): WooLiveData<List<Customer>> {
|
||||
val callBack = WooLiveData<List<Customer>>()
|
||||
woocommerce.CustomerRepository().customers(customerFilter).enqueue(callBack)
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun update(id: Int, customer: Customer): WooLiveData<Customer> {
|
||||
val callBack = WooLiveData<Customer>()
|
||||
woocommerce.CustomerRepository().update(id, customer).enqueue(callBack)
|
||||
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun delete(id: Int): WooLiveData<Customer> {
|
||||
val callBack = WooLiveData<Customer>()
|
||||
woocommerce.CustomerRepository().delete(id).enqueue(callBack)
|
||||
|
||||
return callBack
|
||||
}
|
||||
|
||||
fun delete(id: Int, force: Boolean): WooLiveData<Customer> {
|
||||
val callBack = WooLiveData<Customer>()
|
||||
woocommerce.CustomerRepository().delete(id, force).enqueue(callBack)
|
||||
|
||||
return callBack
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,98 @@
|
||||
package me.gilo.woodroid.app.repo
|
||||
|
||||
import android.util.Log
|
||||
import com.google.android.gms.tasks.Task
|
||||
import com.google.firebase.firestore.CollectionReference
|
||||
import com.google.firebase.firestore.FirebaseFirestore
|
||||
import me.gilo.woodroid.app.models.Identifiable
|
||||
import me.gilo.woodroid.app.models.Repository
|
||||
|
||||
|
||||
/**
|
||||
* Manages data access for Firebase
|
||||
*/
|
||||
open class FirebaseRepository<TEntity : Identifiable<String>>(
|
||||
private val entityClass: Class<TEntity>,
|
||||
private val collectionName: String
|
||||
) : Repository<TEntity, String> {
|
||||
|
||||
private val collectionReference: CollectionReference
|
||||
|
||||
|
||||
init {
|
||||
|
||||
val db = FirebaseFirestore.getInstance()
|
||||
this.collectionReference = db.collection(this.collectionName)
|
||||
}
|
||||
|
||||
override fun exists(documentName: String): Task<Boolean> {
|
||||
val documentReference = collectionReference.document(documentName)
|
||||
Log.i(TAG, "Checking existence of '$documentName' in '$collectionName'.")
|
||||
|
||||
return documentReference.get().continueWith { task ->
|
||||
Log.d(TAG, "Checking if '$documentName' exists in '$collectionName'.")
|
||||
task.result!!.exists()
|
||||
}
|
||||
}
|
||||
|
||||
override fun get(id: String): Task<TEntity> {
|
||||
val documentReference = collectionReference.document(id)
|
||||
Log.i(TAG, "Getting '$id' in '$collectionName'.")
|
||||
|
||||
return documentReference.get().continueWith { task ->
|
||||
val documentSnapshot = task.result
|
||||
if (documentSnapshot!!.exists()) {
|
||||
documentSnapshot.toObject(entityClass)
|
||||
} else {
|
||||
Log.d(TAG, "Document '$id' does not exist in '$collectionName'.")
|
||||
entityClass.newInstance()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun create(entity: TEntity): Task<Void> {
|
||||
val documentName = entity.entityKey
|
||||
val documentReference = collectionReference.document(documentName)
|
||||
Log.i(TAG, "Creating '$documentName' in '$collectionName'.")
|
||||
return documentReference.set(entity).addOnFailureListener { e ->
|
||||
Log.d(
|
||||
TAG,
|
||||
"There was an error creating '$documentName' in '$collectionName'!",
|
||||
e
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun update(entity: TEntity): Task<Void> {
|
||||
val documentName = entity.entityKey
|
||||
val documentReference = collectionReference.document(documentName)
|
||||
Log.i(TAG, "Updating '$documentName' in '$collectionName'.")
|
||||
|
||||
return documentReference.set(entity).addOnFailureListener { e ->
|
||||
Log.d(
|
||||
TAG,
|
||||
"There was an error updating '$documentName' in '$collectionName'.",
|
||||
e
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun delete(documentName: String): Task<Void> {
|
||||
val documentReference = collectionReference.document(documentName)
|
||||
Log.i(TAG, "Deleting '$documentName' in '$collectionName'.")
|
||||
|
||||
return documentReference.delete().addOnFailureListener { e ->
|
||||
Log.d(
|
||||
TAG,
|
||||
"There was an error deleting '$documentName' in '$collectionName'.",
|
||||
e
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private val TAG = "FirebaseRepository"
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package me.gilo.wc.repo;
|
||||
package me.gilo.woodroid.app.repo;
|
||||
|
||||
import com.google.android.gms.tasks.OnFailureListener;
|
||||
import com.google.android.gms.tasks.OnSuccessListener;
|
||||
@ -7,10 +7,10 @@ import com.google.firebase.auth.FirebaseAuth;
|
||||
import com.google.firebase.firestore.CollectionReference;
|
||||
import com.google.firebase.firestore.DocumentReference;
|
||||
import com.google.firebase.storage.StorageReference;
|
||||
import me.gilo.wc.common.CompletionGenericLiveData;
|
||||
import me.gilo.wc.common.CompletionLiveData;
|
||||
import me.gilo.wc.common.DocumentLiveData;
|
||||
import me.gilo.wc.models.User;
|
||||
import me.gilo.woodroid.app.common.CompletionGenericLiveData;
|
||||
import me.gilo.woodroid.app.common.CompletionLiveData;
|
||||
import me.gilo.woodroid.app.common.DocumentLiveData;
|
||||
import me.gilo.woodroid.app.models.User;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
@ -38,6 +38,11 @@ public class FirebaseUserRepository extends FirebaseRepository {
|
||||
|
||||
}
|
||||
|
||||
public void logout() {
|
||||
FirebaseAuth auth = FirebaseAuth.getInstance();
|
||||
auth.signOut();
|
||||
}
|
||||
|
||||
|
||||
public CompletionGenericLiveData<AuthResult> anonymousSignIn() {
|
||||
final CompletionGenericLiveData<AuthResult> completion = new CompletionGenericLiveData();
|
||||
@ -1,7 +1,7 @@
|
||||
package me.gilo.wc.repo;
|
||||
package me.gilo.woodroid.app.repo;
|
||||
|
||||
|
||||
import me.gilo.wc.common.WooLiveData;
|
||||
import me.gilo.woodroid.app.common.WooLiveData;
|
||||
import me.gilo.woodroid.Woocommerce;
|
||||
import me.gilo.woodroid.models.Order;
|
||||
import me.gilo.woodroid.models.filters.OrderFilter;
|
||||
@ -23,7 +23,7 @@ public class OrderRepository {
|
||||
public WooLiveData<Order> addToCart(int productId) {
|
||||
final WooLiveData<Order> callBack = new WooLiveData();
|
||||
|
||||
woocommerce.OrderRepository().addToCart(productId).enqueue(callBack);
|
||||
woocommerce.OrderRepository().addToCart(productId, null).enqueue(callBack);
|
||||
return callBack;
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package me.gilo.wc.repo;
|
||||
package me.gilo.woodroid.app.repo;
|
||||
|
||||
|
||||
import me.gilo.wc.common.WooLiveData;
|
||||
import me.gilo.woodroid.app.common.WooLiveData;
|
||||
import me.gilo.woodroid.Woocommerce;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
import me.gilo.woodroid.models.ProductReview;
|
||||
@ -1,11 +1,9 @@
|
||||
package me.gilo.wc.repo;
|
||||
package me.gilo.woodroid.app.repo;
|
||||
|
||||
|
||||
import me.gilo.wc.common.WooLiveData;
|
||||
import me.gilo.woodroid.app.common.WooLiveData;
|
||||
import me.gilo.woodroid.Woocommerce;
|
||||
import me.gilo.woodroid.models.Product;
|
||||
import me.gilo.woodroid.models.ProductReview;
|
||||
import me.gilo.woodroid.models.filters.ProductFilter;
|
||||
import me.gilo.woodroid.models.filters.ProductReviewFilter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -1,9 +1,10 @@
|
||||
package me.gilo.wc.ui
|
||||
package me.gilo.woodroid.app.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper
|
||||
import me.gilo.wc.ui.state.ProgressDialogFragment
|
||||
import me.gilo.woodroid.app.Config
|
||||
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment
|
||||
import me.gilo.woodroid.Woocommerce
|
||||
|
||||
open class BaseActivity : AppCompatActivity() {
|
||||
@ -11,10 +12,10 @@ open class BaseActivity : AppCompatActivity() {
|
||||
private lateinit var progressDialog : ProgressDialogFragment
|
||||
|
||||
val woocommerce = Woocommerce.Builder()
|
||||
.setSiteUrl("http://157.230.131.179")
|
||||
.setSiteUrl(Config.siteUrl)
|
||||
.setApiVersion(Woocommerce.API_V3)
|
||||
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
|
||||
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
|
||||
.setConsumerKey(Config.consumerKey)
|
||||
.setConsumerSecret(Config.consumerSecret)
|
||||
.build()
|
||||
|
||||
|
||||
@ -1,16 +1,12 @@
|
||||
package me.gilo.wc.ui
|
||||
package me.gilo.woodroid.app.ui
|
||||
|
||||
import android.app.Activity
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.Snackbar
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.LinearLayoutManager
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import me.gilo.wc.R
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import me.gilo.woodroid.app.R
|
||||
|
||||
import kotlinx.android.synthetic.main.activity_menu.*
|
||||
import kotlinx.android.synthetic.main.content_menu.*
|
||||
import me.gilo.wc.adapter.MenuAdapter
|
||||
import me.gilo.woodroid.app.adapter.MenuAdapter
|
||||
import java.util.ArrayList
|
||||
|
||||
class MenuActivity : BaseActivity() {
|
||||
@ -22,7 +18,11 @@ class MenuActivity : BaseActivity() {
|
||||
|
||||
title = "Menu"
|
||||
|
||||
val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false)
|
||||
val layoutManager = LinearLayoutManager(
|
||||
baseContext,
|
||||
LinearLayoutManager.VERTICAL,
|
||||
false
|
||||
)
|
||||
rvMenu.layoutManager = layoutManager
|
||||
rvMenu.isNestedScrollingEnabled = false
|
||||
|
||||
129
app/src/main/java/me/gilo/woodroid/app/ui/WooDroidActivity.kt
Normal file
129
app/src/main/java/me/gilo/woodroid/app/ui/WooDroidActivity.kt
Normal file
@ -0,0 +1,129 @@
|
||||
package me.gilo.woodroid.app.ui
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import com.google.firebase.auth.FirebaseAuth
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper
|
||||
import me.gilo.raison.ui.user.onboarding.SignInActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.common.BaseActivity
|
||||
import me.gilo.woodroid.app.common.Status
|
||||
import me.gilo.woodroid.app.ui.product.CartActivity
|
||||
import me.gilo.woodroid.app.ui.state.ProgressDialogFragment
|
||||
import me.gilo.woodroid.app.viewmodels.CartViewModel
|
||||
|
||||
abstract class WooDroidActivity<T : ViewModel> : BaseActivity() {
|
||||
|
||||
|
||||
abstract var viewModel : T
|
||||
private lateinit var progressDialog: ProgressDialogFragment
|
||||
|
||||
override fun attachBaseContext(newBase: Context) {
|
||||
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
|
||||
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
if(FirebaseAuth.getInstance().currentUser == null){
|
||||
startActivity(Intent(baseContext, SignInActivity::class.java))
|
||||
finish()
|
||||
}
|
||||
//cart()
|
||||
}
|
||||
|
||||
fun showLoading() {
|
||||
showLoading("Please wait", "This will only take a second")
|
||||
}
|
||||
|
||||
fun showLoading(title: String, message: String) {
|
||||
val manager = supportFragmentManager
|
||||
progressDialog = ProgressDialogFragment.newInstance(title, message)
|
||||
progressDialog.isCancelable = false
|
||||
progressDialog.show(manager, "progress")
|
||||
}
|
||||
|
||||
fun stopShowingLoading() {
|
||||
progressDialog.dismiss()
|
||||
}
|
||||
|
||||
fun toast(text : String){
|
||||
Toast.makeText(baseContext, text, Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
var tvCartCounter : TextView? = null
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.product, menu)
|
||||
|
||||
val item = menu.findItem(R.id.menu_cart)
|
||||
val rootView = item.actionView as FrameLayout
|
||||
tvCartCounter = rootView.findViewById<TextView>(R.id.tvCart_counter)
|
||||
|
||||
rootView.setOnClickListener{startActivity(Intent(baseContext, CartActivity::class.java))}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
R.id.menu_cart -> {
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
||||
open fun cart() {
|
||||
var viewModel = getViewModel(CartViewModel::class.java)
|
||||
|
||||
viewModel.cart().observe(this, androidx.lifecycle.Observer { response ->
|
||||
when (response!!.status()) {
|
||||
Status.LOADING -> {
|
||||
|
||||
}
|
||||
|
||||
Status.SUCCESS -> {
|
||||
for (cartItem in response.data()){
|
||||
|
||||
}
|
||||
|
||||
if ( response.data().size == 0 && tvCartCounter != null){
|
||||
tvCartCounter?.visibility = View.GONE
|
||||
}else{
|
||||
tvCartCounter?.visibility = View.VISIBLE
|
||||
tvCartCounter?.text = response.data().size.toString()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Status.ERROR -> {
|
||||
|
||||
}
|
||||
|
||||
Status.EMPTY -> {
|
||||
if ( response.data().size == 0 && tvCartCounter != null){
|
||||
tvCartCounter?.visibility = View.GONE
|
||||
}else{
|
||||
tvCartCounter?.visibility = View.VISIBLE
|
||||
tvCartCounter?.text = response.data().size.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,9 +1,8 @@
|
||||
package me.gilo.wc.ui.checkout
|
||||
package me.gilo.woodroid.app.ui.checkout
|
||||
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.Snackbar
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import me.gilo.wc.R
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
|
||||
import kotlinx.android.synthetic.main.activity_checkout.*
|
||||
|
||||
@ -14,10 +13,6 @@ class CheckoutActivity : AppCompatActivity() {
|
||||
setContentView(R.layout.activity_checkout)
|
||||
setSupportActionBar(toolbar)
|
||||
|
||||
fab.setOnClickListener { view ->
|
||||
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
|
||||
.setAction("Action", null).show()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,10 +1,10 @@
|
||||
package me.gilo.wc.ui.coupon
|
||||
package me.gilo.woodroid.app.ui.coupon
|
||||
|
||||
import android.os.Bundle
|
||||
import kotlinx.android.synthetic.main.activity_add_coupon.*
|
||||
import kotlinx.android.synthetic.main.content_add_coupon.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.ui.BaseActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.ui.BaseActivity
|
||||
import me.gilo.woodroid.models.Coupon
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
@ -1,11 +1,11 @@
|
||||
package me.gilo.wc.ui.coupon
|
||||
package me.gilo.woodroid.app.ui.coupon
|
||||
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import kotlinx.android.synthetic.main.activity_coupon.*
|
||||
import kotlinx.android.synthetic.main.content_coupon.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.ui.BaseActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.ui.BaseActivity
|
||||
import me.gilo.woodroid.models.Coupon
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
@ -50,7 +50,7 @@ class CouponActivity : BaseActivity() {
|
||||
override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) {
|
||||
val coupon = response.body()!!
|
||||
|
||||
etCode.setText(coupon.code.toUpperCase())
|
||||
etCode.setText(coupon.code?.toUpperCase())
|
||||
etDescription.setText(coupon.description)
|
||||
|
||||
stopShowingLoading()
|
||||
@ -70,7 +70,7 @@ class CouponActivity : BaseActivity() {
|
||||
if (response.isSuccessful) {
|
||||
val coupon = response.body()!!
|
||||
|
||||
etCode.setText(coupon.code.toUpperCase())
|
||||
etCode.setText(coupon.code?.toUpperCase())
|
||||
etDescription.setText(coupon.description)
|
||||
|
||||
finish()
|
||||
@ -95,7 +95,7 @@ class CouponActivity : BaseActivity() {
|
||||
override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) {
|
||||
val coupon = response.body()!!
|
||||
|
||||
etCode.setText(coupon.code.toUpperCase())
|
||||
etCode.setText(coupon.code?.toUpperCase())
|
||||
etDescription.setText(coupon.description)
|
||||
|
||||
stopShowingLoading()
|
||||
@ -1,13 +1,13 @@
|
||||
package me.gilo.wc.ui.coupon
|
||||
package me.gilo.woodroid.app.ui.coupon
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.v7.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import kotlinx.android.synthetic.main.activity_coupons.*
|
||||
import kotlinx.android.synthetic.main.content_coupons.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.adapter.CouponAdapter
|
||||
import me.gilo.wc.ui.BaseActivity
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.CouponAdapter
|
||||
import me.gilo.woodroid.app.ui.BaseActivity
|
||||
import me.gilo.woodroid.models.Coupon
|
||||
import me.gilo.woodroid.models.filters.CouponFilter
|
||||
import retrofit2.Call
|
||||
@ -28,7 +28,11 @@ class CouponsActivity : BaseActivity() {
|
||||
|
||||
title = "Coupons"
|
||||
|
||||
val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false)
|
||||
val layoutManager = LinearLayoutManager(
|
||||
baseContext,
|
||||
LinearLayoutManager.VERTICAL,
|
||||
false
|
||||
)
|
||||
rvCoupons.layoutManager = layoutManager
|
||||
rvCoupons.isNestedScrollingEnabled = false
|
||||
|
||||
@ -48,7 +52,7 @@ class CouponsActivity : BaseActivity() {
|
||||
//Not best practise, but works for purposes of demo
|
||||
private fun coupons() {
|
||||
val filter = CouponFilter()
|
||||
filter.search = "FEB"
|
||||
filter.setSearch("FEB")
|
||||
|
||||
woocommerce.CouponRepository().coupons(filter).enqueue(object : Callback<List<Coupon>> {
|
||||
override fun onResponse(call: Call<List<Coupon>>, response: Response<List<Coupon>>) {
|
||||
@ -1,20 +1,15 @@
|
||||
package me.gilo.wc.ui.customer
|
||||
package me.gilo.woodroid.app.ui.customer
|
||||
|
||||
import android.arch.lifecycle.Observer
|
||||
import androidx.lifecycle.Observer
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.ContextCompat.startActivity
|
||||
import android.widget.Toast
|
||||
import com.google.firebase.auth.FirebaseAuth
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper
|
||||
import kotlinx.android.synthetic.main.customer_basic_details.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.common.Status
|
||||
import me.gilo.wc.models.User
|
||||
import me.gilo.wc.ui.WooDroidActivity
|
||||
import me.gilo.wc.ui.home.HomeActivity
|
||||
import me.gilo.wc.viewmodels.CustomerViewModel
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.common.Status
|
||||
import me.gilo.woodroid.app.ui.WooDroidActivity
|
||||
import me.gilo.woodroid.app.viewmodels.CustomerViewModel
|
||||
import me.gilo.woodroid.models.Customer
|
||||
import java.util.regex.Matcher
|
||||
import java.util.regex.Pattern
|
||||
@ -22,11 +17,13 @@ import java.util.regex.Pattern
|
||||
class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
|
||||
|
||||
|
||||
override lateinit var viewModel : CustomerViewModel
|
||||
override lateinit var viewModel: CustomerViewModel
|
||||
private val pattern = Pattern.compile(EMAIL_PATTERN)
|
||||
private var matcher: Matcher? = null
|
||||
lateinit var customer: Customer
|
||||
|
||||
var newCustomer = false
|
||||
|
||||
override fun attachBaseContext(newBase: Context) {
|
||||
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
|
||||
}
|
||||
@ -40,20 +37,25 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
|
||||
|
||||
customer()
|
||||
|
||||
flSave.setOnClickListener{save()}
|
||||
flSave.setOnClickListener {
|
||||
if (newCustomer) {
|
||||
create()
|
||||
} else {
|
||||
save()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private fun customer() {
|
||||
viewModel.currentCustomer().observe(this, Observer {
|
||||
response->
|
||||
when (response!!.status()){
|
||||
Status.LOADING ->{
|
||||
viewModel.currentCustomer().observe(this, Observer { response ->
|
||||
when (response!!.status()) {
|
||||
Status.LOADING -> {
|
||||
showLoading("Retrieve customer details", "This will only take a short while")
|
||||
}
|
||||
|
||||
Status.SUCCESS ->{
|
||||
Status.SUCCESS -> {
|
||||
stopShowingLoading()
|
||||
customer = response.data()[0]
|
||||
|
||||
@ -62,15 +64,18 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
|
||||
etLastName.setText(customer.lastName)
|
||||
etUsername.setText(customer.username)
|
||||
|
||||
newCustomer = false
|
||||
}
|
||||
|
||||
Status.ERROR ->{
|
||||
Status.ERROR -> {
|
||||
stopShowingLoading()
|
||||
Toast.makeText(baseContext, response.error().message.toString(), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
Status.EMPTY ->{
|
||||
Status.EMPTY -> {
|
||||
stopShowingLoading()
|
||||
|
||||
newCustomer = true
|
||||
}
|
||||
|
||||
}
|
||||
@ -90,24 +95,23 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
|
||||
customer.lastName = lastName
|
||||
customer.username = username
|
||||
|
||||
viewModel.update(customer.id, customer).observe(this, Observer {
|
||||
response->
|
||||
when (response!!.status()){
|
||||
Status.LOADING ->{
|
||||
viewModel.update(customer.id, customer).observe(this, Observer { response ->
|
||||
when (response!!.status()) {
|
||||
Status.LOADING -> {
|
||||
showLoading("Uploading account details", "This will only take a short while")
|
||||
}
|
||||
|
||||
Status.SUCCESS ->{
|
||||
Status.SUCCESS -> {
|
||||
stopShowingLoading()
|
||||
finish()
|
||||
}
|
||||
|
||||
Status.ERROR ->{
|
||||
Status.ERROR -> {
|
||||
stopShowingLoading()
|
||||
Toast.makeText(baseContext, response.error().message.toString(), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
Status.EMPTY ->{
|
||||
Status.EMPTY -> {
|
||||
|
||||
}
|
||||
|
||||
@ -115,6 +119,47 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
|
||||
})
|
||||
|
||||
|
||||
} else {
|
||||
Toast.makeText(this, "Please correct the information entered", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun create() {
|
||||
if (validates()) {
|
||||
val email = etEmail.text.toString()
|
||||
val firstName = etFirstName.text.toString()
|
||||
val lastName = etLastName.text.toString()
|
||||
val username = etUsername.text.toString()
|
||||
|
||||
var customer = Customer()
|
||||
customer.email = email
|
||||
customer.firstName = firstName
|
||||
customer.lastName = lastName
|
||||
customer.username = username
|
||||
|
||||
viewModel.create(customer).observe(this, Observer { response ->
|
||||
when (response!!.status()) {
|
||||
Status.LOADING -> {
|
||||
showLoading("Uploading account details", "This will only take a short while")
|
||||
}
|
||||
|
||||
Status.SUCCESS -> {
|
||||
stopShowingLoading()
|
||||
finish()
|
||||
}
|
||||
|
||||
Status.ERROR -> {
|
||||
stopShowingLoading()
|
||||
Toast.makeText(baseContext, response.error().message.toString(), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
Status.EMPTY -> {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
} else {
|
||||
Toast.makeText(this, "Please correct the information entered", Toast.LENGTH_SHORT).show()
|
||||
@ -160,7 +205,8 @@ class BasicCustomerDetailsActivity : WooDroidActivity<CustomerViewModel>() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
|
||||
private const val EMAIL_PATTERN =
|
||||
"^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,18 +1,16 @@
|
||||
package me.gilo.wc.ui.customer
|
||||
package me.gilo.woodroid.app.ui.customer
|
||||
|
||||
import android.arch.lifecycle.Observer
|
||||
import androidx.lifecycle.Observer
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import com.google.firebase.auth.FirebaseAuth
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper
|
||||
import kotlinx.android.synthetic.main.customer_billing_address.*
|
||||
import kotlinx.android.synthetic.main.drawer_filter.view.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.common.Status
|
||||
import me.gilo.wc.ui.WooDroidActivity
|
||||
import me.gilo.wc.viewmodels.CustomerViewModel
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.common.Status
|
||||
import me.gilo.woodroid.app.ui.WooDroidActivity
|
||||
import me.gilo.woodroid.app.viewmodels.CustomerViewModel
|
||||
import me.gilo.woodroid.models.BillingAddress
|
||||
import me.gilo.woodroid.models.Customer
|
||||
|
||||
@ -108,7 +106,7 @@ class BillingAddressActivity : WooDroidActivity<CustomerViewModel>() {
|
||||
customer.billingAddress.country = country
|
||||
customer.billingAddress.phone = phone
|
||||
|
||||
customer.billingAddress.email = FirebaseAuth.getInstance().currentUser!!.email
|
||||
customer.billingAddress.email = FirebaseAuth.getInstance().currentUser!!.email!!
|
||||
|
||||
viewModel.update(customer.id, customer).observe(this, Observer {
|
||||
response->
|
||||
@ -1,6 +1,6 @@
|
||||
package me.gilo.wc.ui.customer
|
||||
package me.gilo.woodroid.app.ui.customer
|
||||
|
||||
import android.arch.lifecycle.Observer
|
||||
import androidx.lifecycle.Observer
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
@ -8,10 +8,10 @@ import android.widget.Toast
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper
|
||||
import kotlinx.android.synthetic.main.activity_profile.*
|
||||
import kotlinx.android.synthetic.main.content_profile.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.common.Status
|
||||
import me.gilo.wc.ui.WooDroidActivity
|
||||
import me.gilo.wc.viewmodels.CustomerViewModel
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.common.Status
|
||||
import me.gilo.woodroid.app.ui.WooDroidActivity
|
||||
import me.gilo.woodroid.app.viewmodels.CustomerViewModel
|
||||
|
||||
class ProfileActivity : WooDroidActivity<CustomerViewModel>() {
|
||||
|
||||
@ -1,16 +1,15 @@
|
||||
package me.gilo.wc.ui.customer
|
||||
package me.gilo.woodroid.app.ui.customer
|
||||
|
||||
import android.arch.lifecycle.Observer
|
||||
import androidx.lifecycle.Observer
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import io.github.inflationx.viewpump.ViewPumpContextWrapper
|
||||
import kotlinx.android.synthetic.main.customer_shipping_address.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.common.Status
|
||||
import me.gilo.wc.ui.WooDroidActivity
|
||||
import me.gilo.wc.viewmodels.CustomerViewModel
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.common.Status
|
||||
import me.gilo.woodroid.app.ui.WooDroidActivity
|
||||
import me.gilo.woodroid.app.viewmodels.CustomerViewModel
|
||||
import me.gilo.woodroid.models.Customer
|
||||
import me.gilo.woodroid.models.ShippingAddress
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
package me.gilo.wc.ui.home
|
||||
package me.gilo.woodroid.app.ui.home
|
||||
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.Fragment
|
||||
import android.support.v7.widget.LinearLayoutManager
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import kotlinx.android.synthetic.main.fragment_category.*
|
||||
import me.gilo.wc.R
|
||||
import me.gilo.wc.adapter.CategoryAdapter
|
||||
import me.gilo.wc.common.Status
|
||||
import me.gilo.wc.viewmodels.CategoryViewModel
|
||||
import me.gilo.woodroid.app.R
|
||||
import me.gilo.woodroid.app.adapter.CategoryAdapter
|
||||
import me.gilo.woodroid.app.common.Status
|
||||
import me.gilo.woodroid.app.viewmodels.CategoryViewModel
|
||||
import me.gilo.woodroid.models.Category
|
||||
import me.gilo.woodroid.models.filters.ProductCategoryFilter
|
||||
import java.util.*
|
||||
@ -46,7 +46,11 @@ class CategoryFragment : Fragment() {
|
||||
|
||||
viewModel = (activity as HomeActivity).getViewModel(CategoryViewModel::class.java)
|
||||
|
||||
val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
|
||||
val layoutManager = LinearLayoutManager(
|
||||
activity,
|
||||
LinearLayoutManager.VERTICAL,
|
||||
false
|
||||
)
|
||||
rvCategory.layoutManager = layoutManager
|
||||
rvCategory.isNestedScrollingEnabled = false
|
||||
|
||||
@ -62,9 +66,9 @@ class CategoryFragment : Fragment() {
|
||||
private fun categories() {
|
||||
|
||||
val filter = ProductCategoryFilter()
|
||||
filter.per_page = 50
|
||||
filter.setPer_page(50)
|
||||
|
||||
viewModel.categories(filter).observe(this, android.arch.lifecycle.Observer { response ->
|
||||
viewModel.categories(filter).observe(this, androidx.lifecycle.Observer { response ->
|
||||
when (response!!.status()) {
|
||||
Status.LOADING -> {
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user