From 51b88245759f10d6e9de940f4e989ef763686c8e Mon Sep 17 00:00:00 2001 From: Aqid Date: Thu, 23 Nov 2017 16:26:16 +0700 Subject: [PATCH 1/4] [update] fix contracts & maybe pattern --- .../mvvmstarter/data/local/UserStorage.java | 25 +++++++++++++++---- .../data/local/contracts/RAGEContract.java | 24 ++++++++++++++++++ .../data/remote/contracts/CRUDContract.java | 4 +-- 3 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/id/co/flipbox/mvvmstarter/data/local/contracts/RAGEContract.java diff --git a/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/UserStorage.java b/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/UserStorage.java index fa30acb..bf9bdd2 100644 --- a/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/UserStorage.java +++ b/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/UserStorage.java @@ -5,8 +5,8 @@ import java.util.ArrayList; import java.util.List; -import id.co.flipbox.mvvmstarter.data.local.contracts.AGERContract; import id.co.flipbox.mvvmstarter.data.local.contracts.CacheContract; +import id.co.flipbox.mvvmstarter.data.local.contracts.RAGEContract; import id.co.flipbox.mvvmstarter.models.User; import id.co.flipbox.mvvmstarter.utils.constants.K; import io.reactivex.Maybe; @@ -16,13 +16,13 @@ * Created by bukhoriaqid on 5/27/17. */ -public class UserStorage implements AGERContract, CacheContract +public class UserStorage implements RAGEContract, CacheContract { @Override public boolean isCacheValid () { // TODO: 7/28/17 define your own cache validity - return true; + return false; } @@ -30,13 +30,28 @@ public boolean isCacheValid () public Maybe> getList () { List users = isCacheValid() ? Hawk.get(K.USER_LIST, new ArrayList()) : null; - return Maybe.just(users).subscribeOn(Schedulers.io()); + if (users == null) + { + return Maybe.empty(); + } + else + { + return Maybe.just(users).subscribeOn(Schedulers.io()); + } } @Override public Maybe get (Integer id) { - return Maybe.just(isCacheValid() ? Hawk.get(String.format(K.USER_DETAIL, id), new User(0, "", "")) : null); + User user = isCacheValid() ? Hawk.get(String.format(K.USER_DETAIL, id), new User(0, "", "")) : null; + if (user == null) + { + return Maybe.empty(); + } + else + { + return Maybe.just(user).subscribeOn(Schedulers.io()); + } } @Override diff --git a/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/contracts/RAGEContract.java b/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/contracts/RAGEContract.java new file mode 100644 index 0000000..075e442 --- /dev/null +++ b/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/contracts/RAGEContract.java @@ -0,0 +1,24 @@ +package id.co.flipbox.mvvmstarter.data.local.contracts; + +import java.util.List; + +import io.reactivex.Maybe; + +/** + * Created by bukhoriaqid on 5/27/17. + */ + +public interface RAGEContract +{ + Maybe> getList (); + + Maybe get (U id); + + void addAll (List objs); + + void add (T obj); + + void edit (T obj, U id); + + void delete (U id); +} diff --git a/app/src/main/java/id/co/flipbox/mvvmstarter/data/remote/contracts/CRUDContract.java b/app/src/main/java/id/co/flipbox/mvvmstarter/data/remote/contracts/CRUDContract.java index f945858..7db2df9 100644 --- a/app/src/main/java/id/co/flipbox/mvvmstarter/data/remote/contracts/CRUDContract.java +++ b/app/src/main/java/id/co/flipbox/mvvmstarter/data/remote/contracts/CRUDContract.java @@ -11,11 +11,11 @@ public interface CRUDContract { - Maybe> getList (); + Maybe> getList (); void create (T obj); - Maybe read (U id); + Maybe read (U id); void update (T obj, U id); From 3cbf5586e77b931041f25374740b48dc69b2faeb Mon Sep 17 00:00:00 2001 From: Aqid Date: Thu, 23 Nov 2017 16:28:38 +0700 Subject: [PATCH 2/4] [delete] AGER Contract - renamed to RAGEContract --- .../mvvmstarter/data/local/UserStorage.java | 18 ++------------ .../data/local/contracts/AGERContract.java | 24 ------------------- 2 files changed, 2 insertions(+), 40 deletions(-) delete mode 100644 app/src/main/java/id/co/flipbox/mvvmstarter/data/local/contracts/AGERContract.java diff --git a/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/UserStorage.java b/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/UserStorage.java index bf9bdd2..46d3547 100644 --- a/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/UserStorage.java +++ b/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/UserStorage.java @@ -30,28 +30,14 @@ public boolean isCacheValid () public Maybe> getList () { List users = isCacheValid() ? Hawk.get(K.USER_LIST, new ArrayList()) : null; - if (users == null) - { - return Maybe.empty(); - } - else - { - return Maybe.just(users).subscribeOn(Schedulers.io()); - } + return users == null ? Maybe.>empty() : Maybe.just(users).subscribeOn(Schedulers.io()); } @Override public Maybe get (Integer id) { User user = isCacheValid() ? Hawk.get(String.format(K.USER_DETAIL, id), new User(0, "", "")) : null; - if (user == null) - { - return Maybe.empty(); - } - else - { - return Maybe.just(user).subscribeOn(Schedulers.io()); - } + return user == null ? Maybe.empty() : Maybe.just(user).subscribeOn(Schedulers.io()); } @Override diff --git a/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/contracts/AGERContract.java b/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/contracts/AGERContract.java deleted file mode 100644 index 4d0f7a2..0000000 --- a/app/src/main/java/id/co/flipbox/mvvmstarter/data/local/contracts/AGERContract.java +++ /dev/null @@ -1,24 +0,0 @@ -package id.co.flipbox.mvvmstarter.data.local.contracts; - -import java.util.List; - -import io.reactivex.Maybe; - -/** - * Created by bukhoriaqid on 5/27/17. - */ - -public interface AGERContract -{ - Maybe> getList (); - - Maybe get (U id); - - void addAll (List objs); - - void add (T obj); - - void edit (T obj, U id); - - void delete (U id); -} From 1ebf77f6e1a46f2148361a10c4bf3a8518d10a8c Mon Sep 17 00:00:00 2001 From: aqid Date: Mon, 11 Dec 2017 22:42:18 +0700 Subject: [PATCH 3/4] [add] flavor dimensions [update] library versions --- app/build.gradle | 39 ++++++++++++++----- .../retrofit/RetrofitServiceFactory.java | 3 +- app/src/main/res/values/strings.xml | 1 - build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ec978fe..66e5298 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,18 +1,37 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion '25.0.2' + compileSdkVersion 27 + buildToolsVersion '26.0.2' defaultConfig { applicationId "id.co.flipbox.mvvmstarter" minSdkVersion 18 - targetSdkVersion 25 + targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true + + buildConfigField 'String', 'BASE_URL', '"https://jsonplaceholder.typicode.com"' + } + + flavorDimensions "env" + productFlavors { + dev { // development environment + dimension "env" + applicationIdSuffix ".dev" + versionNameSuffix "-dev" + buildConfigField 'String', 'BASE_URL', '"https://jsonplaceholder.typicode.com"' + resValue "string", "app_name", "MVVM Starter Dev" + } + prod { //production environment + dimension "env" + buildConfigField 'String', 'BASE_URL', '"https://jsonplaceholder.typicode.com"' + resValue "string", "app_name", "MVVM Starter" + } } + buildTypes { release { minifyEnabled false @@ -31,22 +50,22 @@ dependencies { exclude group: 'com.android.support', module: 'support-annotations' }) testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.3.1' - compile 'com.android.support:support-v4:25.3.1' - compile 'com.android.support:design:25.3.1' - compile 'com.google.android.gms:play-services-location:11.0.1' + compile 'com.android.support:appcompat-v7:27.0.2' + compile 'com.android.support:support-v4:27.0.2' + compile 'com.android.support:design:27.0.2' + compile 'com.google.android.gms:play-services-location:11.6.2' //marshmallow & up permission - compile 'pub.devrel:easypermissions:0.4.3' + compile 'pub.devrel:easypermissions:1.0.1' //loader compile 'com.github.flipboxstudio:sosoito:v1.0.3' //validator - compile 'com.github.Ilhasoft:data-binding-validator:0.6.4' + compile 'com.github.Ilhasoft:data-binding-validator:1.0.0' //network-related libraries compile 'com.google.code.gson:gson:2.8.1' compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' - compile 'com.squareup.okhttp3:logging-interceptor:3.0.0' + compile 'com.squareup.okhttp3:logging-interceptor:3.9.1' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' diff --git a/app/src/main/java/id/co/flipbox/mvvmstarter/data/remote/retrofit/RetrofitServiceFactory.java b/app/src/main/java/id/co/flipbox/mvvmstarter/data/remote/retrofit/RetrofitServiceFactory.java index 0a66996..63bb650 100644 --- a/app/src/main/java/id/co/flipbox/mvvmstarter/data/remote/retrofit/RetrofitServiceFactory.java +++ b/app/src/main/java/id/co/flipbox/mvvmstarter/data/remote/retrofit/RetrofitServiceFactory.java @@ -5,6 +5,7 @@ import java.io.IOException; +import id.co.flipbox.mvvmstarter.BuildConfig; import id.co.flipbox.mvvmstarter.data.DataManager; import okhttp3.Interceptor; import okhttp3.OkHttpClient; @@ -21,7 +22,7 @@ public class RetrofitServiceFactory { // TODO: define your own base url - private static final String BASE_URL = "https://jsonplaceholder.typicode.com"; + private static final String BASE_URL = BuildConfig.BASE_URL; private static final OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); private static final Gson gson = new GsonBuilder() .registerTypeAdapterFactory(new DataTypeAdapterFactory()).create(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8749bc4..f1ad3bf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,4 @@ - MVVM Starter Email Password Sign In diff --git a/build.gradle b/build.gradle index 0a26ece..6f87a7e 100644 --- a/build.gradle +++ b/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -16,6 +17,7 @@ allprojects { repositories { jcenter() maven { url "https://jitpack.io" } + google() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b427448..35c8b44 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Mar 25 17:57:37 WIB 2017 +#Mon Dec 11 22:03:04 WIB 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From 984c119b94b6d60209207be8ae9e2e4154632aef Mon Sep 17 00:00:00 2001 From: aqid Date: Mon, 11 Dec 2017 22:46:18 +0700 Subject: [PATCH 4/4] [update] readme update --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6be90a9..2f96feb 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Libraries used : * Hawk `com.orhanobut:hawk:2.0.1` * Android Libraries ( `appcompat`, `design support`, `data binding`, etc ) * Sosoito Loading Layout `com.github.flipboxstudio:sosoito:v1.0.3` -* Data Binding Validator `com.github.Ilhasoft:data-binding-validator:0.6.4` +* Data Binding Validator `com.github.Ilhasoft:data-binding-validator:1.1.0` * Rx Java 2 + Rx Android `io.reactivex.rxjava2:rxandroid:2.0.1` & `io.reactivex.rxjava2:rxjava:2.1.2` -- @@ -59,6 +59,9 @@ Setup included : * Utilities classes * Camera Utils : Get image from camera / gallery * Calendar Utils : Parse & display Calendar object into various format +* Product Flavors + * Flavor dimensions : using flavor dimensions enable app to combine multiple flavors ( currently using 1 dimension, env / environment ) + * Product Flavors : `dev` for development variables and `prod` for production environment variables -- ![screenshots](https://puu.sh/v7Um1/e36c48b42f.png "Screenshots") @@ -79,4 +82,5 @@ Setup included : - [x] Camera utils - [x] RecyclerView sample - [x] ViewPager sample +- [x] Product Flavors - [ ] Any suggestion?