├── .gitignore
├── app
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.xml
│ │ │ ├── mipmap-hdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ └── layout
│ │ │ │ ├── activity_observable1.xml
│ │ │ │ └── activity_observable2.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── github
│ │ │ │ └── aleksandermielczarek
│ │ │ │ └── observablecacheexample
│ │ │ │ ├── component
│ │ │ │ ├── ActivityComponent.java
│ │ │ │ └── AppComponent.java
│ │ │ │ ├── ObservableCacheApplication.java
│ │ │ │ ├── service
│ │ │ │ ├── Cached1Service.java
│ │ │ │ ├── Observable1Service.java
│ │ │ │ ├── Cached2Service.java
│ │ │ │ └── Observable2Service.java
│ │ │ │ ├── module
│ │ │ │ ├── Observable1Module.java
│ │ │ │ └── Observable2Module.java
│ │ │ │ └── ui
│ │ │ │ ├── Observable2Activity.java
│ │ │ │ ├── Observable1Activity.java
│ │ │ │ ├── Observable1ViewModel.java
│ │ │ │ └── Observable2ViewModel.java
│ │ └── AndroidManifest.xml
│ └── androidTest
│ │ └── java
│ │ └── com
│ │ └── github
│ │ └── aleksandermielczarek
│ │ └── observablecacheexample
│ │ ├── Cached2Service.java
│ │ ├── LruObservableCache1Test.java
│ │ └── ObservableCacheService1Test.java
├── proguard-rules.pro
└── build.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── observable-cache-1
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── github
│ │ └── aleksandermielczarek
│ │ └── observablecache
│ │ ├── CacheableSingle.java
│ │ ├── CacheableCompletable.java
│ │ ├── CacheableObservable.java
│ │ ├── SingleFromCache.java
│ │ ├── CompletableFromCache.java
│ │ ├── ObservableFromCache.java
│ │ ├── MapObservableCache.java
│ │ ├── ObservableCache.java
│ │ └── LruObservableCache.java
├── proguard-rules.pro
└── build.gradle
├── observable-cache-2
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── github
│ │ └── aleksandermielczarek
│ │ └── observablecache2
│ │ ├── CacheableMaybe.java
│ │ ├── CacheableSingle.java
│ │ ├── CacheableFlowable.java
│ │ ├── CacheableCompletable.java
│ │ ├── CacheableObservable.java
│ │ ├── MaybeFromCache.java
│ │ ├── SingleFromCache.java
│ │ ├── FlowableFromCache.java
│ │ ├── CompletableFromCache.java
│ │ ├── ObservableFromCache.java
│ │ ├── ObservableCache.java
│ │ ├── MapObservableCache.java
│ │ └── LruObservableCache.java
├── proguard-rules.pro
└── build.gradle
├── observable-cache-api
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── github
│ │ └── aleksandermielczarek
│ │ └── observablecache
│ │ └── api
│ │ ├── Cache.java
│ │ └── ValueFromCache.java
├── proguard-rules.pro
└── build.gradle
├── observable-cache-1-service
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── github
│ │ └── aleksandermielczarek
│ │ └── observablecache
│ │ └── service
│ │ ├── ObservableCacheServiceCreator.java
│ │ └── ObservableCacheService.java
├── proguard-rules.pro
└── build.gradle
├── observable-cache-2-service
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── github
│ │ └── aleksandermielczarek
│ │ └── observablecache2
│ │ └── service
│ │ ├── ObservableCacheServiceCreator.java
│ │ └── ObservableCacheService.java
├── proguard-rules.pro
└── build.gradle
├── observable-cache-service-api
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── github
│ │ └── aleksandermielczarek
│ │ └── observablecache
│ │ └── service
│ │ └── api
│ │ ├── ObservableCacheServiceCreator.java
│ │ └── AbstractObservableCacheService.java
├── proguard-rules.pro
└── build.gradle
├── observable-cache-1-service-annotations
├── build.gradle
└── src
│ └── main
│ └── java
│ └── com
│ └── github
│ └── aleksandermielczarek
│ └── observablecache
│ └── service
│ └── annotations
│ └── ObservableCacheService.java
├── observable-cache-2-service-annotations
├── build.gradle
└── src
│ └── main
│ └── java
│ └── com
│ └── github
│ └── aleksandermielczarek
│ └── observablecache2
│ └── service
│ └── annotations
│ └── ObservableCacheService.java
├── settings.gradle
├── observable-cache-2-service-processor
├── build.gradle
└── src
│ └── main
│ └── java
│ └── com
│ └── github
│ └── aleksandermielczarek
│ └── observablecache2
│ └── service
│ └── processor
│ ├── method
│ ├── base
│ │ ├── MaybeBaseMethod.java
│ │ ├── SingleBaseMethod.java
│ │ ├── FlowableBaseMethod.java
│ │ ├── CompletableBaseMethod.java
│ │ └── ObservableBaseMethod.java
│ └── extend
│ │ ├── MaybeExtendMethod.java
│ │ ├── SingleExtendMethod.java
│ │ ├── FlowableExtendMethod.java
│ │ ├── ObservableExtendMethod.java
│ │ └── CompletableExtendMethod.java
│ └── ObservableCacheServiceProcessor.java
├── observable-cache-1-service-processor
├── build.gradle
└── src
│ └── main
│ └── java
│ └── com
│ └── github
│ └── aleksandermielczarek
│ └── observablecache
│ └── service
│ └── processor
│ ├── method
│ ├── base
│ │ ├── SingleBaseMethod.java
│ │ ├── ObservableBaseMethod.java
│ │ └── CompletableBaseMethod.java
│ └── extend
│ │ ├── SingleExtendMethod.java
│ │ ├── ObservableExtendMethod.java
│ │ └── CompletableExtendMethod.java
│ └── ObservableCacheServiceProcessor.java
├── observable-cache-service-processor-api
├── build.gradle
└── src
│ └── main
│ └── java
│ └── com
│ └── github
│ └── aleksandermielczarek
│ └── observablecache
│ └── service
│ └── processor
│ └── api
│ ├── exception
│ └── ObservableCacheServiceException.java
│ ├── method
│ ├── WritableMethod.java
│ ├── extend
│ │ ├── RemoveExtendMethod.java
│ │ ├── ExtendMethod.java
│ │ └── FromCacheMethod.java
│ └── base
│ │ └── BaseMethod.java
│ └── AbstractObservableCacheServiceProcessor.java
├── gradle.properties
├── dependencies.gradle
├── gradlew.bat
├── gradlew
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .idea
3 | .gradle
4 | local.properties
5 | build
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Observable Cache
3 |
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AleksanderMielczarek/ObservableCache/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AleksanderMielczarek/ObservableCache/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AleksanderMielczarek/ObservableCache/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AleksanderMielczarek/ObservableCache/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AleksanderMielczarek/ObservableCache/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AleksanderMielczarek/ObservableCache/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/observable-cache-1/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/observable-cache-api/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/observable-cache-1-service/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/observable-cache-2-service/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/observable-cache-service-api/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Dec 28 10:00:20 PST 2015
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.1-all.zip
7 |
--------------------------------------------------------------------------------
/observable-cache-1-service-annotations/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | dependencies {
7 | compile fileTree(dir: 'libs', include: ['*.jar'])
8 | }
9 |
10 | sourceCompatibility = "1.7"
11 | targetCompatibility = "1.7"
12 |
--------------------------------------------------------------------------------
/observable-cache-2-service-annotations/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | dependencies {
7 | compile fileTree(dir: 'libs', include: ['*.jar'])
8 | }
9 |
10 | sourceCompatibility = "1.7"
11 | targetCompatibility = "1.7"
12 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':observable-cache-1-service', ':observable-cache-1-service-annotations', ':observable-cache-1-service-processor', ':observable-cache-api', ':observable-cache-service-processor-api', ':observable-cache-service-api', ':observable-cache-2', ':observable-cache-2-service', ':observable-cache-2-service-processor', ':observable-cache-2-service-annotations', 'observable-cache-1'
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/observable-cache-api/src/main/java/com/github/aleksandermielczarek/observablecache/api/Cache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.api;
2 |
3 | /**
4 | * Created by Aleksander Mielczarek on 29.10.2016.
5 | */
6 |
7 | public interface Cache {
8 |
9 | boolean clear();
10 |
11 | boolean remove(String key);
12 |
13 | int size();
14 |
15 | boolean exists(String key);
16 |
17 | boolean isEmpty();
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | sourceCompatibility = "1.8"
7 | targetCompatibility = "1.8"
8 |
9 | dependencies {
10 | compile fileTree(dir: 'libs', include: ['*.jar'])
11 | compile project(':observable-cache-2-service-annotations')
12 | compile project(':observable-cache-service-processor-api')
13 | }
--------------------------------------------------------------------------------
/observable-cache-1-service-processor/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | sourceCompatibility = "1.8"
7 | targetCompatibility = "1.8"
8 |
9 | dependencies {
10 | compile fileTree(dir: 'libs', include: ['*.jar'])
11 | compile project(':observable-cache-1-service-annotations')
12 | compile project(':observable-cache-service-processor-api')
13 | }
14 |
--------------------------------------------------------------------------------
/observable-cache-1-service/src/main/java/com/github/aleksandermielczarek/observablecache/service/ObservableCacheServiceCreator.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service;
2 |
3 | import com.github.aleksandermielczarek.observablecache.ObservableCache;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 30.10.2016.
7 | */
8 |
9 | interface ObservableCacheServiceCreator extends com.github.aleksandermielczarek.observablecache.service.api.ObservableCacheServiceCreator {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/observable-cache-2-service-annotations/src/main/java/com/github/aleksandermielczarek/observablecache2/service/annotations/ObservableCacheService.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.annotations;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target(ElementType.TYPE)
9 | @Retention(RetentionPolicy.CLASS)
10 | public @interface ObservableCacheService {
11 | }
12 |
--------------------------------------------------------------------------------
/observable-cache-2-service/src/main/java/com/github/aleksandermielczarek/observablecache2/service/ObservableCacheServiceCreator.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service;
2 |
3 | import com.github.aleksandermielczarek.observablecache2.ObservableCache;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 |
9 | interface ObservableCacheServiceCreator extends com.github.aleksandermielczarek.observablecache.service.api.ObservableCacheServiceCreator {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/observable-cache-service-api/src/main/java/com/github/aleksandermielczarek/observablecache/service/api/ObservableCacheServiceCreator.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.api;
2 |
3 |
4 | import com.github.aleksandermielczarek.observablecache.api.Cache;
5 |
6 | /**
7 | * Created by Aleksander Mielczarek on 30.10.2016.
8 | */
9 |
10 | public interface ObservableCacheServiceCreator {
11 |
12 | S createObservableCacheService(Class observableCacheServiceClass, T observableCache);
13 | }
14 |
--------------------------------------------------------------------------------
/observable-cache-service-processor-api/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | sourceCompatibility = "1.8"
7 | targetCompatibility = "1.8"
8 |
9 | dependencies {
10 | compile fileTree(dir: 'libs', include: ['*.jar'])
11 | compile "com.squareup:javapoet:$javapoetVersion"
12 | compile "com.google.auto.service:auto-service:$autoServiceVersion"
13 | compile "com.google.guava:guava:$guavaVersion"
14 | compile "org.apache.commons:commons-lang3:$commonsLang3Version"
15 | }
16 |
--------------------------------------------------------------------------------
/observable-cache-1-service-annotations/src/main/java/com/github/aleksandermielczarek/observablecache/service/annotations/ObservableCacheService.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.annotations;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * Created by Aleksander Mielczarek on 30.10.2016.
10 | */
11 | @Target(ElementType.TYPE)
12 | @Retention(RetentionPolicy.CLASS)
13 | public @interface ObservableCacheService {
14 | }
15 |
--------------------------------------------------------------------------------
/observable-cache-service-processor-api/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/api/exception/ObservableCacheServiceException.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.api.exception;
2 |
3 | /**
4 | * Created by Aleksander Mielczarek on 30.10.2016.
5 | */
6 |
7 | public class ObservableCacheServiceException extends RuntimeException {
8 |
9 | public ObservableCacheServiceException(String message) {
10 | super(message);
11 | }
12 |
13 | public ObservableCacheServiceException(String message, Throwable cause) {
14 | super(message, cause);
15 |
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/observable-cache-1-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/method/base/SingleBaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.method.base;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 05.11.2016.
7 | */
8 | public class SingleBaseMethod implements BaseMethod {
9 |
10 | @Override
11 | public String returnedType() {
12 | return "com.github.aleksandermielczarek.observablecache.CacheableSingle";
13 | }
14 |
15 | @Override
16 | public String cacheMethod() {
17 | return "cacheSingle";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/base/MaybeBaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.base;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class MaybeBaseMethod implements BaseMethod {
9 |
10 | @Override
11 | public String returnedType() {
12 | return "com.github.aleksandermielczarek.observablecache2.CacheableMaybe";
13 | }
14 |
15 | @Override
16 | public String cacheMethod() {
17 | return "cacheMaybe";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/base/SingleBaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.base;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class SingleBaseMethod implements BaseMethod {
9 |
10 | @Override
11 | public String returnedType() {
12 | return "com.github.aleksandermielczarek.observablecache2.CacheableSingle";
13 | }
14 |
15 | @Override
16 | public String cacheMethod() {
17 | return "cacheSingle";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Aleksander\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/CacheableSingle.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 | import rx.Single;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 01.11.2016.
7 | */
8 |
9 | public final class CacheableSingle implements Single.Transformer {
10 |
11 | private final String key;
12 | private final ObservableCache observableCache;
13 |
14 | public CacheableSingle(String key, ObservableCache observableCache) {
15 | this.key = key;
16 | this.observableCache = observableCache;
17 | }
18 |
19 | @Override
20 | public Single call(Single single) {
21 | return observableCache.cacheSingle(key, single);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/base/FlowableBaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.base;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class FlowableBaseMethod implements BaseMethod {
9 |
10 | @Override
11 | public String returnedType() {
12 | return "com.github.aleksandermielczarek.observablecache2.CacheableFlowable";
13 | }
14 |
15 | @Override
16 | public String cacheMethod() {
17 | return "cacheFlowable";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/observable-cache-1-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/method/base/ObservableBaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.method.base;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 05.11.2016.
7 | */
8 | public class ObservableBaseMethod implements BaseMethod {
9 |
10 | @Override
11 | public String returnedType() {
12 | return "com.github.aleksandermielczarek.observablecache.CacheableObservable";
13 | }
14 |
15 | @Override
16 | public String cacheMethod() {
17 | return "cacheObservable";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/observable-cache-1-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/method/base/CompletableBaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.method.base;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 05.11.2016.
7 | */
8 | public class CompletableBaseMethod implements BaseMethod {
9 |
10 | @Override
11 | public String returnedType() {
12 | return "com.github.aleksandermielczarek.observablecache.CacheableCompletable";
13 | }
14 |
15 | @Override
16 | public String cacheMethod() {
17 | return "cacheCompletable";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/observable-cache-1/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Aleksander\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/base/CompletableBaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.base;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class CompletableBaseMethod implements BaseMethod {
9 |
10 | @Override
11 | public String returnedType() {
12 | return "com.github.aleksandermielczarek.observablecache2.CacheableCompletable";
13 | }
14 |
15 | @Override
16 | public String cacheMethod() {
17 | return "cacheCompletable";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/base/ObservableBaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.base;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class ObservableBaseMethod implements BaseMethod {
9 |
10 | @Override
11 | public String returnedType() {
12 | return "com.github.aleksandermielczarek.observablecache2.CacheableObservable";
13 | }
14 |
15 | @Override
16 | public String cacheMethod() {
17 | return "cacheObservable";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/observable-cache-2/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Aleksander\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/observable-cache-api/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Aleksander\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/observable-cache-service-api/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Aleksander\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/CacheableCompletable.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 | import rx.Completable;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 01.11.2016.
7 | */
8 |
9 | public final class CacheableCompletable implements Completable.Transformer {
10 |
11 | private final String key;
12 | private final ObservableCache observableCache;
13 |
14 | public CacheableCompletable(String key, ObservableCache observableCache) {
15 | this.key = key;
16 | this.observableCache = observableCache;
17 | }
18 |
19 | @Override
20 | public Completable call(Completable completable) {
21 | return observableCache.cacheCompletable(key, completable);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/CacheableObservable.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 | import rx.Observable;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 01.11.2016.
7 | */
8 |
9 | public final class CacheableObservable implements Observable.Transformer {
10 |
11 | private final String key;
12 | private final ObservableCache observableCache;
13 |
14 | public CacheableObservable(String key, ObservableCache observableCache) {
15 | this.key = key;
16 | this.observableCache = observableCache;
17 | }
18 |
19 | @Override
20 | public Observable call(Observable observable) {
21 | return observableCache.cacheObservable(key, observable);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/CacheableMaybe.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import io.reactivex.Maybe;
4 | import io.reactivex.MaybeSource;
5 | import io.reactivex.MaybeTransformer;
6 |
7 | /**
8 | * Created by Aleksander Mielczarek on 09.02.2017.
9 | */
10 |
11 | public final class CacheableMaybe implements MaybeTransformer {
12 |
13 | private final String key;
14 | private final ObservableCache observableCache;
15 |
16 | public CacheableMaybe(String key, ObservableCache observableCache) {
17 | this.key = key;
18 | this.observableCache = observableCache;
19 | }
20 |
21 | @Override
22 | public MaybeSource apply(Maybe upstream) {
23 | return observableCache.cacheMaybe(key, upstream);
24 | }
25 | }
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/CacheableSingle.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import io.reactivex.Single;
4 | import io.reactivex.SingleSource;
5 | import io.reactivex.SingleTransformer;
6 |
7 | /**
8 | * Created by Aleksander Mielczarek on 09.02.2017.
9 | */
10 |
11 | public final class CacheableSingle implements SingleTransformer {
12 |
13 | private final String key;
14 | private final ObservableCache observableCache;
15 |
16 | public CacheableSingle(String key, ObservableCache observableCache) {
17 | this.key = key;
18 | this.observableCache = observableCache;
19 | }
20 |
21 | @Override
22 | public SingleSource apply(Single upstream) {
23 | return observableCache.cacheSingle(key, upstream);
24 | }
25 | }
--------------------------------------------------------------------------------
/observable-cache-1-service/src/main/java/com/github/aleksandermielczarek/observablecache/service/ObservableCacheService.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service;
2 |
3 | import com.github.aleksandermielczarek.observablecache.ObservableCache;
4 | import com.github.aleksandermielczarek.observablecache.service.api.AbstractObservableCacheService;
5 |
6 | /**
7 | * Created by Aleksander Mielczarek on 30.10.2016.
8 | */
9 |
10 | public final class ObservableCacheService extends AbstractObservableCacheService {
11 |
12 | public ObservableCacheService(ObservableCache observableCache) {
13 | super(observableCache);
14 | }
15 |
16 | @Override
17 | protected String creatorClassImpl() {
18 | return "com.github.aleksandermielczarek.observablecache.service.ObservableCacheServiceCreatorImpl";
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/component/ActivityComponent.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.component;
2 |
3 |
4 | import com.github.aleksandermielczarek.napkin.module.NapkinActivityModule;
5 | import com.github.aleksandermielczarek.napkin.scope.ActivityScope;
6 | import com.github.aleksandermielczarek.observablecacheexample.ui.Observable1Activity;
7 | import com.github.aleksandermielczarek.observablecacheexample.ui.Observable2Activity;
8 |
9 | import dagger.Subcomponent;
10 |
11 | /**
12 | * Created by Aleksander Mielczarek on 12.11.2016.
13 | */
14 | @ActivityScope
15 | @Subcomponent(modules = NapkinActivityModule.class)
16 | public interface ActivityComponent {
17 |
18 | void inject(Observable1Activity observable1Activity);
19 |
20 | void inject(Observable2Activity observable2Activity);
21 | }
22 |
--------------------------------------------------------------------------------
/observable-cache-1-service/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Aleksander\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 | -keep class com.github.aleksandermielczarek.observablecache.service.ObservableCacheServiceCreatorImpl { *; }
--------------------------------------------------------------------------------
/observable-cache-2-service/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\Aleksander\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 | -keep class com.github.aleksandermielczarek.observablecache2.service.ObservableCacheServiceCreatorImpl { *; }
--------------------------------------------------------------------------------
/observable-cache-2-service/src/main/java/com/github/aleksandermielczarek/observablecache2/service/ObservableCacheService.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service;
2 |
3 | import com.github.aleksandermielczarek.observablecache2.ObservableCache;
4 | import com.github.aleksandermielczarek.observablecache.service.api.AbstractObservableCacheService;
5 |
6 | /**
7 | * Created by Aleksander Mielczarek on 09.02.2017.
8 | */
9 |
10 | public final class ObservableCacheService extends AbstractObservableCacheService {
11 |
12 | public ObservableCacheService(ObservableCache observableCache) {
13 | super(observableCache);
14 | }
15 |
16 | @Override
17 | protected String creatorClassImpl() {
18 | return "com.github.aleksandermielczarek.observablecache2.service.ObservableCacheServiceCreatorImpl";
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
13 | # org.gradle.jvmargs=-Xmx1536m
14 | # When configured, Gradle will run in incubating parallel mode.
15 | # This option should only be used with decoupled projects. More details, visit
16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
17 | # org.gradle.parallel=true
18 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/CacheableFlowable.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import org.reactivestreams.Publisher;
4 |
5 | import io.reactivex.Flowable;
6 | import io.reactivex.FlowableTransformer;
7 |
8 | /**
9 | * Created by Aleksander Mielczarek on 09.02.2017.
10 | */
11 |
12 | public final class CacheableFlowable implements FlowableTransformer {
13 |
14 | private final String key;
15 | private final ObservableCache observableCache;
16 |
17 | public CacheableFlowable(String key, ObservableCache observableCache) {
18 | this.key = key;
19 | this.observableCache = observableCache;
20 | }
21 |
22 | @Override
23 | public Publisher apply(Flowable upstream) {
24 | return observableCache.cacheFlowable(key, upstream);
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/CacheableCompletable.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import io.reactivex.Completable;
4 | import io.reactivex.CompletableSource;
5 | import io.reactivex.CompletableTransformer;
6 |
7 | /**
8 | * Created by Aleksander Mielczarek on 09.02.2017.
9 | */
10 |
11 | public final class CacheableCompletable implements CompletableTransformer {
12 |
13 | private final String key;
14 | private final ObservableCache observableCache;
15 |
16 | public CacheableCompletable(String key, ObservableCache observableCache) {
17 | this.key = key;
18 | this.observableCache = observableCache;
19 | }
20 |
21 | @Override
22 | public CompletableSource apply(Completable upstream) {
23 | return observableCache.cacheCompletable(key, upstream);
24 | }
25 | }
--------------------------------------------------------------------------------
/observable-cache-service-processor-api/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/api/method/WritableMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.api.method;
2 |
3 | import com.google.common.collect.Lists;
4 | import com.squareup.javapoet.TypeSpec;
5 |
6 | import org.apache.commons.lang3.StringUtils;
7 |
8 | import java.util.List;
9 |
10 | import javax.lang.model.element.ExecutableElement;
11 |
12 | /**
13 | * Created by Aleksander Mielczarek on 05.11.2016.
14 | */
15 |
16 | public interface WritableMethod {
17 |
18 | void writeMethod(TypeSpec.Builder builder, ExecutableElement method, String keyName);
19 |
20 | default List nameTokens(ExecutableElement method) {
21 | return Lists.newArrayList(StringUtils.splitByCharacterTypeCamelCase(method.getSimpleName().toString()));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/CacheableObservable.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import io.reactivex.Observable;
4 | import io.reactivex.ObservableSource;
5 | import io.reactivex.ObservableTransformer;
6 |
7 | /**
8 | * Created by Aleksander Mielczarek on 09.02.2017.
9 | */
10 |
11 | public final class CacheableObservable implements ObservableTransformer {
12 |
13 | private final String key;
14 | private final ObservableCache observableCache;
15 |
16 | public CacheableObservable(String key, ObservableCache observableCache) {
17 | this.key = key;
18 | this.observableCache = observableCache;
19 | }
20 |
21 | @Override
22 | public ObservableSource apply(Observable upstream) {
23 | return observableCache.cacheObservable(key, upstream);
24 | }
25 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/component/AppComponent.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.component;
2 |
3 | import com.github.aleksandermielczarek.napkin.module.NapkinActivityModule;
4 | import com.github.aleksandermielczarek.napkin.module.NapkinAppModule;
5 | import com.github.aleksandermielczarek.napkin.scope.AppScope;
6 | import com.github.aleksandermielczarek.observablecacheexample.module.Observable1Module;
7 | import com.github.aleksandermielczarek.observablecacheexample.module.Observable2Module;
8 |
9 | import dagger.Component;
10 |
11 | /**
12 | * Created by Aleksander Mielczarek on 30.10.2016.
13 | */
14 | @Component(modules = {NapkinAppModule.class, Observable1Module.class, Observable2Module.class})
15 | @AppScope
16 | public interface AppComponent {
17 |
18 | ActivityComponent with(NapkinActivityModule activityModule);
19 | }
20 |
--------------------------------------------------------------------------------
/dependencies.gradle:
--------------------------------------------------------------------------------
1 | ext {
2 | versionMajor = 1
3 | versionMinor = 2
4 | versionFix = 2
5 |
6 | minSdkVersionVersion = 16
7 | sdkVersion = 26
8 | buildToolsVersionVersion = "26.0.0"
9 |
10 | toolsBuildGradleVersion = '2.3.3'
11 | gradleRetrolambdaVersion = '3.6.1'
12 | gradleVersionsPluginVersion = '0.15.0'
13 | androidMavenGradlePluginVersion = '1.5'
14 |
15 | espressoCoreVersion = '2.2.2'
16 | junitVersion = '4.12'
17 | supportLibraryVersion = '25.4.0'
18 | guavaVersion = '22.0'
19 | daggerVersion = '2.11'
20 | napkinVersion = '0.7.0'
21 | rxandroidVersion = '1.2.1'
22 | rxjavaVersion = '1.3.0'
23 | rxandroid2Version = '2.0.1'
24 | rxjava2Version = '2.1.1'
25 | androidannotationsVersion = '4.3.1'
26 | parcelerVersion = '1.1.9'
27 | commonsLang3Version = '3.6'
28 | autoServiceVersion = '1.0-rc3'
29 | javapoetVersion = '1.9.0'
30 | }
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/SingleFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.ValueFromCache;
6 |
7 | import rx.Single;
8 |
9 | /**
10 | * Created by Aleksander Mielczarek on 29.10.2016.
11 | */
12 | public final class SingleFromCache extends ValueFromCache> {
13 |
14 | public SingleFromCache() {
15 | this(null);
16 | }
17 |
18 | public SingleFromCache(@Nullable Single valueFromCache) {
19 | super(valueFromCache);
20 | }
21 |
22 | public static SingleFromCache empty() {
23 | return new SingleFromCache<>();
24 | }
25 |
26 | public static SingleFromCache of(@Nullable Single valueFromCache) {
27 | return new SingleFromCache<>(valueFromCache);
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/MaybeFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.ValueFromCache;
6 |
7 | import io.reactivex.Maybe;
8 |
9 | /**
10 | * Created by Aleksander Mielczarek on 09.02.2017.
11 | */
12 |
13 | public final class MaybeFromCache extends ValueFromCache> {
14 |
15 | public MaybeFromCache() {
16 | this(null);
17 | }
18 |
19 | public MaybeFromCache(@Nullable Maybe valueFromCache) {
20 | super(valueFromCache);
21 | }
22 |
23 | public static MaybeFromCache empty() {
24 | return new MaybeFromCache<>();
25 | }
26 |
27 | public static MaybeFromCache of(@Nullable Maybe valueFromCache) {
28 | return new MaybeFromCache<>(valueFromCache);
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/SingleFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.ValueFromCache;
6 |
7 | import io.reactivex.Single;
8 |
9 | /**
10 | * Created by Aleksander Mielczarek on 09.02.2017.
11 | */
12 |
13 | public final class SingleFromCache extends ValueFromCache> {
14 |
15 | public SingleFromCache() {
16 | this(null);
17 | }
18 |
19 | public SingleFromCache(@Nullable Single valueFromCache) {
20 | super(valueFromCache);
21 | }
22 |
23 | public static SingleFromCache empty() {
24 | return new SingleFromCache<>();
25 | }
26 |
27 | public static SingleFromCache of(@Nullable Single valueFromCache) {
28 | return new SingleFromCache<>(valueFromCache);
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/CompletableFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.ValueFromCache;
6 |
7 | import rx.Completable;
8 |
9 | /**
10 | * Created by Aleksander Mielczarek on 29.10.2016.
11 | */
12 | public final class CompletableFromCache extends ValueFromCache {
13 |
14 | public CompletableFromCache() {
15 | this(null);
16 | }
17 |
18 | public CompletableFromCache(@Nullable Completable valueFromCache) {
19 | super(valueFromCache);
20 | }
21 |
22 | public static CompletableFromCache empty() {
23 | return new CompletableFromCache();
24 | }
25 |
26 | public static CompletableFromCache of(@Nullable Completable valueFromCache) {
27 | return new CompletableFromCache(valueFromCache);
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/FlowableFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.ValueFromCache;
6 |
7 | import io.reactivex.Flowable;
8 |
9 | /**
10 | * Created by Aleksander Mielczarek on 09.02.2017.
11 | */
12 |
13 | public final class FlowableFromCache extends ValueFromCache> {
14 |
15 | public FlowableFromCache() {
16 | this(null);
17 | }
18 |
19 | public FlowableFromCache(@Nullable Flowable valueFromCache) {
20 | super(valueFromCache);
21 | }
22 |
23 | public static FlowableFromCache empty() {
24 | return new FlowableFromCache<>();
25 | }
26 |
27 | public static FlowableFromCache of(@Nullable Flowable valueFromCache) {
28 | return new FlowableFromCache<>(valueFromCache);
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/ObservableFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.ValueFromCache;
6 |
7 | import rx.Observable;
8 |
9 | /**
10 | * Created by Aleksander Mielczarek on 29.10.2016.
11 | */
12 | public final class ObservableFromCache extends ValueFromCache> {
13 |
14 | public ObservableFromCache() {
15 | this(null);
16 | }
17 |
18 | public ObservableFromCache(@Nullable Observable valueFromCache) {
19 | super(valueFromCache);
20 | }
21 |
22 | public static ObservableFromCache empty() {
23 | return new ObservableFromCache<>();
24 | }
25 |
26 | public static ObservableFromCache of(@Nullable Observable valueFromCache) {
27 | return new ObservableFromCache<>(valueFromCache);
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/CompletableFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.ValueFromCache;
6 |
7 | import io.reactivex.Completable;
8 |
9 | /**
10 | * Created by Aleksander Mielczarek on 09.02.2017.
11 | */
12 |
13 | public final class CompletableFromCache extends ValueFromCache {
14 |
15 | public CompletableFromCache() {
16 | this(null);
17 | }
18 |
19 | public CompletableFromCache(@Nullable Completable valueFromCache) {
20 | super(valueFromCache);
21 | }
22 |
23 | public static CompletableFromCache empty() {
24 | return new CompletableFromCache();
25 | }
26 |
27 | public static CompletableFromCache of(@Nullable Completable valueFromCache) {
28 | return new CompletableFromCache(valueFromCache);
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/ObservableFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.ValueFromCache;
6 |
7 | import io.reactivex.Observable;
8 |
9 | /**
10 | * Created by Aleksander Mielczarek on 09.02.2017.
11 | */
12 |
13 | public final class ObservableFromCache extends ValueFromCache> {
14 |
15 | public ObservableFromCache() {
16 | this(null);
17 | }
18 |
19 | public ObservableFromCache(@Nullable Observable valueFromCache) {
20 | super(valueFromCache);
21 | }
22 |
23 | public static ObservableFromCache empty() {
24 | return new ObservableFromCache<>();
25 | }
26 |
27 | public static ObservableFromCache of(@Nullable Observable valueFromCache) {
28 | return new ObservableFromCache<>(valueFromCache);
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/observable-cache-1-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/method/extend/SingleExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.method.extend;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.FromCacheMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 05.11.2016.
7 | */
8 | public class SingleExtendMethod implements FromCacheMethod {
9 |
10 | @Override
11 | public String additionalToken() {
12 | return "cached";
13 | }
14 |
15 | @Override
16 | public String returnedBaseType() {
17 | return "com.github.aleksandermielczarek.observablecache.CacheableSingle";
18 | }
19 |
20 | @Override
21 | public String returnedType() {
22 | return "com.github.aleksandermielczarek.observablecache.SingleFromCache";
23 | }
24 |
25 | @Override
26 | public String fromCacheMethod() {
27 | return "getSingle";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/extend/MaybeExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.extend;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.FromCacheMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class MaybeExtendMethod implements FromCacheMethod {
9 |
10 | @Override
11 | public String additionalToken() {
12 | return "cached";
13 | }
14 |
15 | @Override
16 | public String returnedBaseType() {
17 | return "com.github.aleksandermielczarek.observablecache2.CacheableMaybe";
18 | }
19 |
20 | @Override
21 | public String returnedType() {
22 | return "com.github.aleksandermielczarek.observablecache2.MaybeFromCache";
23 | }
24 |
25 | @Override
26 | public String fromCacheMethod() {
27 | return "getMaybe";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-api/src/main/java/com/github/aleksandermielczarek/observablecache/api/ValueFromCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.api;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 29.10.2016.
7 | */
8 |
9 | public abstract class ValueFromCache {
10 |
11 | @Nullable
12 | private final T valueFromCache;
13 |
14 | public ValueFromCache(@Nullable T valueFromCache) {
15 | this.valueFromCache = valueFromCache;
16 | }
17 |
18 | public boolean isPresent() {
19 | return valueFromCache != null;
20 | }
21 |
22 | @Nullable
23 | public T get() {
24 | return valueFromCache;
25 | }
26 |
27 | public void ifPresent(ValueInCacheAction valueInCacheAction) {
28 | if (isPresent()) {
29 | valueInCacheAction.action(valueFromCache);
30 | }
31 | }
32 |
33 | public interface ValueInCacheAction {
34 | void action(T valueFromCache);
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/extend/SingleExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.extend;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.FromCacheMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class SingleExtendMethod implements FromCacheMethod {
9 |
10 | @Override
11 | public String additionalToken() {
12 | return "cached";
13 | }
14 |
15 | @Override
16 | public String returnedBaseType() {
17 | return "com.github.aleksandermielczarek.observablecache2.CacheableSingle";
18 | }
19 |
20 | @Override
21 | public String returnedType() {
22 | return "com.github.aleksandermielczarek.observablecache2.SingleFromCache";
23 | }
24 |
25 | @Override
26 | public String fromCacheMethod() {
27 | return "getSingle";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/extend/FlowableExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.extend;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.FromCacheMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class FlowableExtendMethod implements FromCacheMethod {
9 |
10 | @Override
11 | public String additionalToken() {
12 | return "cached";
13 | }
14 |
15 | @Override
16 | public String returnedBaseType() {
17 | return "com.github.aleksandermielczarek.observablecache2.CacheableFlowable";
18 | }
19 |
20 | @Override
21 | public String returnedType() {
22 | return "com.github.aleksandermielczarek.observablecache2.FlowableFromCache";
23 | }
24 |
25 | @Override
26 | public String fromCacheMethod() {
27 | return "getFlowable";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-1-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/method/extend/ObservableExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.method.extend;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.FromCacheMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 05.11.2016.
7 | */
8 | public class ObservableExtendMethod implements FromCacheMethod {
9 |
10 | @Override
11 | public String additionalToken() {
12 | return "cached";
13 | }
14 |
15 | @Override
16 | public String returnedBaseType() {
17 | return "com.github.aleksandermielczarek.observablecache.CacheableObservable";
18 | }
19 |
20 | @Override
21 | public String returnedType() {
22 | return "com.github.aleksandermielczarek.observablecache.ObservableFromCache";
23 | }
24 |
25 | @Override
26 | public String fromCacheMethod() {
27 | return "getObservable";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-1-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/method/extend/CompletableExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.method.extend;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.FromCacheMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 05.11.2016.
7 | */
8 | public class CompletableExtendMethod implements FromCacheMethod {
9 |
10 | @Override
11 | public String additionalToken() {
12 | return "cached";
13 | }
14 |
15 | @Override
16 | public String returnedBaseType() {
17 | return "com.github.aleksandermielczarek.observablecache.CacheableCompletable";
18 | }
19 |
20 | @Override
21 | public String returnedType() {
22 | return "com.github.aleksandermielczarek.observablecache.CompletableFromCache";
23 | }
24 |
25 | @Override
26 | public String fromCacheMethod() {
27 | return "getCompletable";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/extend/ObservableExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.extend;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.FromCacheMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class ObservableExtendMethod implements FromCacheMethod {
9 |
10 | @Override
11 | public String additionalToken() {
12 | return "cached";
13 | }
14 |
15 | @Override
16 | public String returnedBaseType() {
17 | return "com.github.aleksandermielczarek.observablecache2.CacheableObservable";
18 | }
19 |
20 | @Override
21 | public String returnedType() {
22 | return "com.github.aleksandermielczarek.observablecache2.ObservableFromCache";
23 | }
24 |
25 | @Override
26 | public String fromCacheMethod() {
27 | return "getObservable";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/method/extend/CompletableExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor.method.extend;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.FromCacheMethod;
4 |
5 | /**
6 | * Created by Aleksander Mielczarek on 09.02.2017.
7 | */
8 | public class CompletableExtendMethod implements FromCacheMethod {
9 |
10 | @Override
11 | public String additionalToken() {
12 | return "cached";
13 | }
14 |
15 | @Override
16 | public String returnedBaseType() {
17 | return "com.github.aleksandermielczarek.observablecache2.CacheableCompletable";
18 | }
19 |
20 | @Override
21 | public String returnedType() {
22 | return "com.github.aleksandermielczarek.observablecache2.CompletableFromCache";
23 | }
24 |
25 | @Override
26 | public String fromCacheMethod() {
27 | return "getCompletable";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/ObservableCacheApplication.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample;
2 |
3 | import android.app.Application;
4 |
5 | import com.github.aleksandermielczarek.napkin.ComponentProvider;
6 | import com.github.aleksandermielczarek.napkin.module.NapkinAppModule;
7 | import com.github.aleksandermielczarek.observablecacheexample.component.AppComponent;
8 | import com.github.aleksandermielczarek.observablecacheexample.component.DaggerAppComponent;
9 |
10 | /**
11 | * Created by Aleksander Mielczarek on 30.10.2016.
12 | */
13 |
14 | public class ObservableCacheApplication extends Application implements ComponentProvider {
15 |
16 | private AppComponent appComponent;
17 |
18 | @Override
19 | public void onCreate() {
20 | super.onCreate();
21 | appComponent = DaggerAppComponent.builder()
22 | .napkinAppModule(new NapkinAppModule(this))
23 | .build();
24 | }
25 |
26 | @Override
27 | public AppComponent provideComponent() {
28 | return appComponent;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/observable-cache-api/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | android {
7 | compileSdkVersion sdkVersion
8 | buildToolsVersion buildToolsVersionVersion
9 |
10 | defaultConfig {
11 | minSdkVersion minSdkVersionVersion
12 | targetSdkVersion sdkVersion
13 | versionCode versionMajor * 1000000 + versionMinor * 10000 + versionFix * 100
14 | versionName "$versionMajor.$versionMinor.$versionFix"
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 | }
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | }
24 |
25 | dependencies {
26 | compile fileTree(dir: 'libs', include: ['*.jar'])
27 | //test
28 | androidTestCompile("com.android.support.test.espresso:espresso-core:$espressoCoreVersion", {
29 | exclude group: 'com.android.support', module: 'support-annotations'
30 | })
31 | testCompile "junit:junit:$junitVersion"
32 |
33 | //support
34 | compile "com.android.support:appcompat-v7:$supportLibraryVersion"
35 | }
36 |
--------------------------------------------------------------------------------
/observable-cache-service-api/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | android {
7 | compileSdkVersion sdkVersion
8 | buildToolsVersion buildToolsVersionVersion
9 |
10 | defaultConfig {
11 | minSdkVersion minSdkVersionVersion
12 | targetSdkVersion sdkVersion
13 | versionCode versionMajor * 1000000 + versionMinor * 10000 + versionFix * 100
14 | versionName "$versionMajor.$versionMinor.$versionFix"
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 | }
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | }
24 |
25 | dependencies {
26 | compile fileTree(dir: 'libs', include: ['*.jar'])
27 |
28 | //test
29 | androidTestCompile("com.android.support.test.espresso:espresso-core:$espressoCoreVersion", {
30 | exclude group: 'com.android.support', module: 'support-annotations'
31 | })
32 | testCompile "junit:junit:$junitVersion"
33 |
34 | //support
35 | compile "com.android.support:appcompat-v7:$supportLibraryVersion"
36 |
37 | compile project(':observable-cache-api')
38 | }
39 |
--------------------------------------------------------------------------------
/observable-cache-1/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | android {
7 | compileSdkVersion sdkVersion
8 | buildToolsVersion buildToolsVersionVersion
9 |
10 | defaultConfig {
11 | minSdkVersion minSdkVersionVersion
12 | targetSdkVersion sdkVersion
13 | versionCode versionMajor * 1000000 + versionMinor * 10000 + versionFix * 100
14 | versionName "$versionMajor.$versionMinor.$versionFix"
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 | }
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | }
24 |
25 | dependencies {
26 | compile fileTree(dir: 'libs', include: ['*.jar'])
27 |
28 | //test
29 | androidTestCompile("com.android.support.test.espresso:espresso-core:$espressoCoreVersion", {
30 | exclude group: 'com.android.support', module: 'support-annotations'
31 | })
32 | testCompile "junit:junit:$junitVersion"
33 |
34 | //support
35 | compile "com.android.support:appcompat-v7:$supportLibraryVersion"
36 |
37 | //rx
38 | compile "io.reactivex:rxjava:$rxjavaVersion"
39 |
40 | compile project(':observable-cache-api')
41 | }
42 |
--------------------------------------------------------------------------------
/observable-cache-2/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | android {
7 | compileSdkVersion sdkVersion
8 | buildToolsVersion buildToolsVersionVersion
9 |
10 | defaultConfig {
11 | minSdkVersion minSdkVersionVersion
12 | targetSdkVersion sdkVersion
13 | versionCode versionMajor * 1000000 + versionMinor * 10000 + versionFix * 100
14 | versionName "$versionMajor.$versionMinor.$versionFix"
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 | }
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | }
24 |
25 | dependencies {
26 | compile fileTree(dir: 'libs', include: ['*.jar'])
27 |
28 | //test
29 | androidTestCompile("com.android.support.test.espresso:espresso-core:$espressoCoreVersion", {
30 | exclude group: 'com.android.support', module: 'support-annotations'
31 | })
32 | testCompile "junit:junit:$junitVersion"
33 |
34 | //support
35 | compile "com.android.support:appcompat-v7:$supportLibraryVersion"
36 |
37 | //rx
38 | compile "io.reactivex.rxjava2:rxjava:$rxjava2Version"
39 |
40 | compile project(':observable-cache-api')
41 | }
42 |
43 |
--------------------------------------------------------------------------------
/observable-cache-2-service/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | android {
7 | compileSdkVersion sdkVersion
8 | buildToolsVersion buildToolsVersionVersion
9 |
10 | defaultConfig {
11 | minSdkVersion minSdkVersionVersion
12 | targetSdkVersion sdkVersion
13 | versionCode versionMajor * 1000000 + versionMinor * 10000 + versionFix * 100
14 | versionName "$versionMajor.$versionMinor.$versionFix"
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 | }
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | }
24 |
25 | dependencies {
26 | compile fileTree(dir: 'libs', include: ['*.jar'])
27 |
28 | //test
29 | androidTestCompile("com.android.support.test.espresso:espresso-core:$espressoCoreVersion", {
30 | exclude group: 'com.android.support', module: 'support-annotations'
31 | })
32 | testCompile "junit:junit:$junitVersion"
33 |
34 | //support
35 | compile "com.android.support:appcompat-v7:$supportLibraryVersion"
36 |
37 | compile project(':observable-cache-2')
38 | compile project(':observable-cache-service-api')
39 | compile project(':observable-cache-2-service-annotations')
40 | }
--------------------------------------------------------------------------------
/observable-cache-1-service/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.AleksanderMielczarek'
5 |
6 | android {
7 | compileSdkVersion sdkVersion
8 | buildToolsVersion buildToolsVersionVersion
9 |
10 | defaultConfig {
11 | minSdkVersion minSdkVersionVersion
12 | targetSdkVersion sdkVersion
13 | versionCode versionMajor * 1000000 + versionMinor * 10000 + versionFix * 100
14 | versionName "$versionMajor.$versionMinor.$versionFix"
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 | }
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | }
24 |
25 | dependencies {
26 | compile fileTree(dir: 'libs', include: ['*.jar'])
27 |
28 | //test
29 | androidTestCompile("com.android.support.test.espresso:espresso-core:$espressoCoreVersion", {
30 | exclude group: 'com.android.support', module: 'support-annotations'
31 | })
32 | testCompile "junit:junit:$junitVersion"
33 |
34 | //support
35 | compile "com.android.support:appcompat-v7:$supportLibraryVersion"
36 |
37 | compile project(':observable-cache-1')
38 | compile project(':observable-cache-service-api')
39 | compile project(':observable-cache-1-service-annotations')
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/service/Cached1Service.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.service;
2 |
3 | import com.github.aleksandermielczarek.observablecache.CacheableCompletable;
4 | import com.github.aleksandermielczarek.observablecache.CacheableObservable;
5 | import com.github.aleksandermielczarek.observablecache.CacheableSingle;
6 | import com.github.aleksandermielczarek.observablecache.CompletableFromCache;
7 | import com.github.aleksandermielczarek.observablecache.ObservableFromCache;
8 | import com.github.aleksandermielczarek.observablecache.SingleFromCache;
9 | import com.github.aleksandermielczarek.observablecache.service.annotations.ObservableCacheService;
10 |
11 | /**
12 | * Created by Aleksander Mielczarek on 30.10.2016.
13 | */
14 | @ObservableCacheService
15 | public interface Cached1Service {
16 |
17 | CacheableObservable observable();
18 |
19 | ObservableFromCache cachedObservable();
20 |
21 | CacheableSingle single();
22 |
23 | SingleFromCache cachedSingle();
24 |
25 | CacheableCompletable completable();
26 |
27 | CompletableFromCache cachedCompletable();
28 |
29 | CacheableObservable observableError();
30 |
31 | ObservableFromCache cachedObservableError();
32 |
33 | CacheableSingle singleError();
34 |
35 | SingleFromCache cachedSingleError();
36 |
37 | CacheableCompletable completableError();
38 |
39 | CompletableFromCache cachedCompletableError();
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/module/Observable1Module.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.module;
2 |
3 | import com.github.aleksandermielczarek.napkin.scope.AppScope;
4 | import com.github.aleksandermielczarek.observablecache.ObservableCache;
5 | import com.github.aleksandermielczarek.observablecache.LruObservableCache;
6 | import com.github.aleksandermielczarek.observablecache.service.ObservableCacheService;
7 | import com.github.aleksandermielczarek.observablecacheexample.service.Cached1Service;
8 | import com.github.aleksandermielczarek.observablecacheexample.service.Observable1Service;
9 |
10 | import dagger.Module;
11 | import dagger.Provides;
12 |
13 | /**
14 | * Created by Aleksander Mielczarek on 30.10.2016.
15 | */
16 | @Module
17 | @AppScope
18 | public class Observable1Module {
19 |
20 | @Provides
21 | @AppScope
22 | ObservableCache provideObservableCache() {
23 | return LruObservableCache.newInstance();
24 | }
25 |
26 | @Provides
27 | @AppScope
28 | Observable1Service provideObservableService() {
29 | return new Observable1Service();
30 | }
31 |
32 | @Provides
33 | @AppScope
34 | ObservableCacheService provideObservableCacheService(ObservableCache observableCache) {
35 | return new ObservableCacheService(observableCache);
36 | }
37 |
38 | @Provides
39 | @AppScope
40 | Cached1Service provideCachedService(ObservableCacheService observableCacheService) {
41 | return observableCacheService.createObservableCacheService(Cached1Service.class);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/module/Observable2Module.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.module;
2 |
3 | import com.github.aleksandermielczarek.napkin.scope.AppScope;
4 | import com.github.aleksandermielczarek.observablecache2.ObservableCache;
5 | import com.github.aleksandermielczarek.observablecache2.LruObservableCache;
6 | import com.github.aleksandermielczarek.observablecache2.service.ObservableCacheService;
7 | import com.github.aleksandermielczarek.observablecacheexample.service.Cached2Service;
8 | import com.github.aleksandermielczarek.observablecacheexample.service.Observable2Service;
9 |
10 | import dagger.Module;
11 | import dagger.Provides;
12 |
13 | /**
14 | * Created by Aleksander Mielczarek on 09.02.2017.
15 | */
16 | @Module
17 | @AppScope
18 | public class Observable2Module {
19 |
20 | @Provides
21 | @AppScope
22 | ObservableCache provideObservableCache() {
23 | return LruObservableCache.newInstance();
24 | }
25 |
26 | @Provides
27 | @AppScope
28 | Observable2Service provideObservableService() {
29 | return new Observable2Service();
30 | }
31 |
32 | @Provides
33 | @AppScope
34 | ObservableCacheService provideObservableCacheService(ObservableCache observableCache) {
35 | return new ObservableCacheService(observableCache);
36 | }
37 |
38 | @Provides
39 | @AppScope
40 | Cached2Service provideCachedService(ObservableCacheService observableCacheService) {
41 | return observableCacheService.createObservableCacheService(Cached2Service.class);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/observable-cache-service-processor-api/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/api/method/extend/RemoveExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend;
2 |
3 |
4 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
5 | import com.squareup.javapoet.MethodSpec;
6 | import com.squareup.javapoet.TypeSpec;
7 |
8 | import javax.annotation.processing.ProcessingEnvironment;
9 | import javax.lang.model.element.ExecutableElement;
10 | import javax.lang.model.type.TypeKind;
11 |
12 | /**
13 | * Created by Aleksander Mielczarek on 05.11.2016.
14 | */
15 | public class RemoveExtendMethod implements ExtendMethod {
16 |
17 | @Override
18 | public boolean isExtendMethod(ExecutableElement baseMethodElement, BaseMethod baseMethod, ExecutableElement extendMethod, ProcessingEnvironment processingEnvironment) {
19 | if (!extendMethod.getParameters().isEmpty()) {
20 | return false;
21 | }
22 | if (!extendMethod.getReturnType().getKind().equals(TypeKind.BOOLEAN)) {
23 | return false;
24 | }
25 | return ExtendMethod.super.isExtendMethod(baseMethodElement, baseMethod, extendMethod, processingEnvironment);
26 | }
27 |
28 | @Override
29 | public String additionalToken() {
30 | return "remove";
31 | }
32 |
33 | @Override
34 | public void writeMethod(TypeSpec.Builder builder, ExecutableElement method, String keyName) {
35 | builder.addMethod(MethodSpec.overriding(method)
36 | .addStatement("return observableCache.remove(" + keyName + ")")
37 | .build());
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/github/aleksandermielczarek/observablecacheexample/Cached2Service.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample;
2 |
3 |
4 | import com.github.aleksandermielczarek.observablecache2.CacheableCompletable;
5 | import com.github.aleksandermielczarek.observablecache2.CacheableFlowable;
6 | import com.github.aleksandermielczarek.observablecache2.CacheableMaybe;
7 | import com.github.aleksandermielczarek.observablecache2.CacheableObservable;
8 | import com.github.aleksandermielczarek.observablecache2.CacheableSingle;
9 | import com.github.aleksandermielczarek.observablecache2.CompletableFromCache;
10 | import com.github.aleksandermielczarek.observablecache2.FlowableFromCache;
11 | import com.github.aleksandermielczarek.observablecache2.MaybeFromCache;
12 | import com.github.aleksandermielczarek.observablecache2.ObservableFromCache;
13 | import com.github.aleksandermielczarek.observablecache2.SingleFromCache;
14 | import com.github.aleksandermielczarek.observablecache2.service.annotations.ObservableCacheService;
15 |
16 | /**
17 | * Created by Aleksander Mielczarek on 10.02.2017.
18 | */
19 |
20 | @ObservableCacheService
21 | public interface Cached2Service {
22 |
23 | CacheableFlowable flowable();
24 |
25 | FlowableFromCache cachedFlowable();
26 |
27 | CacheableObservable observable();
28 |
29 | ObservableFromCache cachedObservable();
30 |
31 | CacheableSingle single();
32 |
33 | SingleFromCache cachedSingle();
34 |
35 | CacheableMaybe maybe();
36 |
37 | MaybeFromCache cachedMaybe();
38 |
39 | CacheableCompletable completable();
40 |
41 | CompletableFromCache cachedCompletable();
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/observable-cache-service-api/src/main/java/com/github/aleksandermielczarek/observablecache/service/api/AbstractObservableCacheService.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.api;
2 |
3 |
4 | import com.github.aleksandermielczarek.observablecache.api.Cache;
5 |
6 | /**
7 | * Created by Aleksander Mielczarek on 30.10.2016.
8 | */
9 |
10 | public abstract class AbstractObservableCacheService {
11 |
12 | private static final String ERROR_MESSAGE = "Cannot create ObservableCacheServiceCreatorImpl";
13 |
14 | private final T observableCache;
15 | private final ObservableCacheServiceCreator observableCacheServiceCreator;
16 |
17 | @SuppressWarnings("TryWithIdenticalCatches")
18 | public AbstractObservableCacheService(T observableCache) {
19 | this.observableCache = observableCache;
20 | try {
21 | Class> observableCacheServiceCreatorClass = Class.forName(creatorClassImpl());
22 | observableCacheServiceCreator = (ObservableCacheServiceCreator) observableCacheServiceCreatorClass.newInstance();
23 | } catch (ClassNotFoundException e) {
24 | throw new IllegalStateException(ERROR_MESSAGE, e);
25 | } catch (IllegalAccessException e) {
26 | throw new IllegalStateException(ERROR_MESSAGE, e);
27 | } catch (InstantiationException e) {
28 | throw new IllegalStateException(ERROR_MESSAGE, e);
29 | }
30 | }
31 |
32 | protected abstract String creatorClassImpl();
33 |
34 | public S createObservableCacheService(Class observableCacheServiceClass) {
35 | return observableCacheServiceCreator.createObservableCacheService(observableCacheServiceClass, observableCache);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/service/Observable1Service.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.service;
2 |
3 | import android.util.Log;
4 |
5 | import java.util.concurrent.TimeUnit;
6 |
7 | import rx.Completable;
8 | import rx.Observable;
9 | import rx.Single;
10 |
11 | /**
12 | * Created by Aleksander Mielczarek on 30.10.2016.
13 | */
14 |
15 | public class Observable1Service {
16 |
17 | public static final int DELAY = 4;
18 | public static final TimeUnit TIME_UNIT = TimeUnit.SECONDS;
19 |
20 | public Observable observable() {
21 | return Observable.fromCallable(() -> "observable")
22 | .delay(DELAY, TIME_UNIT);
23 | }
24 |
25 | public Single single() {
26 | return Single.fromCallable(() -> "single")
27 | .delay(DELAY, TIME_UNIT);
28 | }
29 |
30 | public Completable completable() {
31 | return Completable.fromCallable(() -> null)
32 | .delay(DELAY, TIME_UNIT);
33 | }
34 |
35 | public Observable observableError() {
36 | return observable().doOnNext(observable -> {
37 | throw new IllegalArgumentException("observableError");
38 | }).doOnError(throwable -> Log.e("ERROR", throwable.getMessage()));
39 | }
40 |
41 | public Single singleError() {
42 | return single().doOnSuccess(single -> {
43 | throw new IllegalArgumentException("singleError");
44 | }).doOnError(throwable -> Log.e("ERROR", throwable.getMessage()));
45 | }
46 |
47 | public Completable completableError() {
48 | return completable().doOnEach(completable -> {
49 | throw new IllegalArgumentException("completableError");
50 | }).doOnError(throwable -> Log.e("ERROR", throwable.getMessage()));
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/observable-cache-service-processor-api/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/api/method/extend/ExtendMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend;
2 |
3 |
4 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.WritableMethod;
5 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
6 |
7 | import java.util.List;
8 |
9 | import javax.annotation.processing.ProcessingEnvironment;
10 | import javax.lang.model.element.ExecutableElement;
11 |
12 | /**
13 | * Created by Aleksander Mielczarek on 05.11.2016.
14 | */
15 |
16 | public interface ExtendMethod extends WritableMethod {
17 |
18 | default boolean isExtendMethod(ExecutableElement baseMethodElement, BaseMethod baseMethod, ExecutableElement extendMethod, ProcessingEnvironment processingEnvironment) {
19 | List baseMethodTokens = nameTokens(baseMethodElement);
20 | List extendMethodTokens = nameTokens(extendMethod);
21 | if (baseMethodTokens.size() >= extendMethodTokens.size()) {
22 | return false;
23 | }
24 | boolean baseHasTokens = false;
25 | for (int i = 0; i < extendMethodTokens.size(); i++) {
26 | String token = extendMethodTokens.remove(i);
27 | String lowerCaseToken = token.toLowerCase();
28 | String newFirstItem = extendMethodTokens.get(0);
29 | String newFirstItemLowerCase = newFirstItem.toLowerCase();
30 | extendMethodTokens.set(0, newFirstItemLowerCase);
31 | if (lowerCaseToken.equals(additionalToken()) && extendMethodTokens.equals(baseMethodTokens)) {
32 | baseHasTokens = true;
33 | }
34 | extendMethodTokens.set(0, newFirstItem);
35 | extendMethodTokens.add(i, token);
36 | if (baseHasTokens) {
37 | break;
38 | }
39 | }
40 | return baseHasTokens;
41 | }
42 |
43 | String additionalToken();
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/observable-cache-service-processor-api/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/api/method/base/BaseMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.api.method.base;
2 |
3 |
4 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.WritableMethod;
5 | import com.google.common.base.CaseFormat;
6 | import com.squareup.javapoet.MethodSpec;
7 | import com.squareup.javapoet.TypeSpec;
8 |
9 | import javax.annotation.processing.ProcessingEnvironment;
10 | import javax.lang.model.element.ExecutableElement;
11 | import javax.lang.model.element.TypeElement;
12 |
13 | /**
14 | * Created by Aleksander Mielczarek on 05.11.2016.
15 | */
16 |
17 | public interface BaseMethod extends WritableMethod {
18 |
19 | default boolean isBaseMethod(ExecutableElement method, ProcessingEnvironment processingEnvironment) {
20 | if (!method.getParameters().isEmpty()) {
21 | return false;
22 | }
23 | TypeElement returnedElement = (TypeElement) processingEnvironment.getTypeUtils().asElement(method.getReturnType());
24 | if (!returnedElement.getQualifiedName().toString().contains(returnedType())) {
25 | return false;
26 | }
27 | return true;
28 | }
29 |
30 | default String keyName(ExecutableElement method) {
31 | String camelCaseName = method.getSimpleName().toString();
32 | return CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, camelCaseName);
33 | }
34 |
35 | default String keyValue(TypeElement type, ExecutableElement method) {
36 | return type.getQualifiedName().toString() + "." + method.getSimpleName().toString();
37 | }
38 |
39 | @Override
40 | default void writeMethod(TypeSpec.Builder builder, ExecutableElement method, String keyName) {
41 | builder.addMethod(MethodSpec.overriding(method)
42 | .addStatement("return observableCache." + cacheMethod() + "(" + keyName + ")")
43 | .build());
44 | }
45 |
46 | String returnedType();
47 |
48 | String cacheMethod();
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/ui/Observable2Activity.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.ui;
2 |
3 | import android.databinding.DataBindingUtil;
4 | import android.os.Bundle;
5 | import android.support.annotation.Nullable;
6 | import android.support.v7.app.AppCompatActivity;
7 |
8 | import com.github.aleksandermielczarek.napkin.Napkin;
9 | import com.github.aleksandermielczarek.napkin.module.NapkinActivityModule;
10 | import com.github.aleksandermielczarek.observablecacheexample.R;
11 | import com.github.aleksandermielczarek.observablecacheexample.component.AppComponent;
12 | import com.github.aleksandermielczarek.observablecacheexample.databinding.ActivityObservable2Binding;
13 |
14 | import org.androidannotations.annotations.EActivity;
15 | import org.androidannotations.annotations.InstanceState;
16 |
17 | import javax.inject.Inject;
18 |
19 | /**
20 | * Created by Aleksander Mielczarek on 10.02.2017.
21 | */
22 | @EActivity
23 | public class Observable2Activity extends AppCompatActivity {
24 |
25 | @InstanceState
26 | protected Observable2ViewModel.State state;
27 |
28 | @Inject
29 | protected Observable2ViewModel observable2ViewModel;
30 |
31 | @Override
32 | protected void onCreate(@Nullable Bundle savedInstanceState) {
33 | super.onCreate(savedInstanceState);
34 | Napkin.provideAppComponent(this)
35 | .with(new NapkinActivityModule(this))
36 | .inject(this);
37 | observable2ViewModel.restoreState(state);
38 | ActivityObservable2Binding binding = DataBindingUtil.setContentView(this, R.layout.activity_observable2);
39 | binding.setViewModel(observable2ViewModel);
40 | }
41 |
42 | @Override
43 | protected void onSaveInstanceState(Bundle outState) {
44 | super.onSaveInstanceState(outState);
45 | state = observable2ViewModel.saveState();
46 | }
47 |
48 | @Override
49 | protected void onStart() {
50 | super.onStart();
51 | observable2ViewModel.restoreObservables();
52 | }
53 |
54 | @Override
55 | protected void onStop() {
56 | super.onStop();
57 | observable2ViewModel.dispose();
58 | }
59 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/ui/Observable1Activity.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.ui;
2 |
3 | import android.databinding.DataBindingUtil;
4 | import android.os.Bundle;
5 | import android.support.annotation.Nullable;
6 | import android.support.v7.app.AppCompatActivity;
7 |
8 | import com.github.aleksandermielczarek.napkin.Napkin;
9 | import com.github.aleksandermielczarek.napkin.module.NapkinActivityModule;
10 | import com.github.aleksandermielczarek.observablecacheexample.R;
11 | import com.github.aleksandermielczarek.observablecacheexample.component.AppComponent;
12 | import com.github.aleksandermielczarek.observablecacheexample.databinding.ActivityObservable1Binding;
13 |
14 | import org.androidannotations.annotations.EActivity;
15 | import org.androidannotations.annotations.InstanceState;
16 |
17 | import javax.inject.Inject;
18 |
19 | /**
20 | * Created by Aleksander Mielczarek on 30.10.2016.
21 | */
22 | @EActivity
23 | public class Observable1Activity extends AppCompatActivity {
24 |
25 | @InstanceState
26 | protected Observable1ViewModel.State state;
27 |
28 | @Inject
29 | protected Observable1ViewModel observable1ViewModel;
30 |
31 | @Override
32 | protected void onCreate(@Nullable Bundle savedInstanceState) {
33 | super.onCreate(savedInstanceState);
34 | Napkin.provideAppComponent(this)
35 | .with(new NapkinActivityModule(this))
36 | .inject(this);
37 | observable1ViewModel.restoreState(state);
38 | ActivityObservable1Binding binding = DataBindingUtil.setContentView(this, R.layout.activity_observable1);
39 | binding.setViewModel(observable1ViewModel);
40 | }
41 |
42 | @Override
43 | protected void onSaveInstanceState(Bundle outState) {
44 | super.onSaveInstanceState(outState);
45 | state = observable1ViewModel.saveState();
46 | }
47 |
48 | @Override
49 | protected void onStart() {
50 | super.onStart();
51 | observable1ViewModel.restoreObservables();
52 | }
53 |
54 | @Override
55 | protected void onStop() {
56 | super.onStop();
57 | observable1ViewModel.unsubscribe();
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/observable-cache-service-processor-api/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/api/method/extend/FromCacheMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend;
2 |
3 |
4 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
5 | import com.squareup.javapoet.MethodSpec;
6 | import com.squareup.javapoet.TypeSpec;
7 |
8 | import javax.annotation.processing.ProcessingEnvironment;
9 | import javax.lang.model.element.Element;
10 | import javax.lang.model.element.ElementKind;
11 | import javax.lang.model.element.ExecutableElement;
12 | import javax.lang.model.element.TypeElement;
13 |
14 | /**
15 | * Created by Aleksander Mielczarek on 06.11.2016.
16 | */
17 |
18 | public interface FromCacheMethod extends ExtendMethod {
19 |
20 | @Override
21 | default boolean isExtendMethod(ExecutableElement baseMethodElement, BaseMethod baseMethod, ExecutableElement extendMethod, ProcessingEnvironment processingEnvironment) {
22 | if (!extendMethod.getParameters().isEmpty()) {
23 | return false;
24 | }
25 | Element element = processingEnvironment.getTypeUtils().asElement(extendMethod.getReturnType());
26 | if (element == null || !element.getKind().equals(ElementKind.CLASS)) {
27 | return false;
28 | }
29 | TypeElement returnedElement = (TypeElement) element;
30 | if (!returnedElement.getQualifiedName().toString().contains(returnedType())) {
31 | return false;
32 | }
33 | if (!returnedBaseType().contains(baseMethod.returnedType())) {
34 | return false;
35 | }
36 | return ExtendMethod.super.isExtendMethod(baseMethodElement, baseMethod, extendMethod, processingEnvironment);
37 | }
38 |
39 | @Override
40 | default void writeMethod(TypeSpec.Builder builder, ExecutableElement method, String keyName) {
41 | builder.addMethod(MethodSpec.overriding(method)
42 | .addStatement("return observableCache." + fromCacheMethod() + "(" + keyName + ")")
43 | .build());
44 | }
45 |
46 | String returnedBaseType();
47 |
48 | String returnedType();
49 |
50 | String fromCacheMethod();
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/service/Cached2Service.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.service;
2 |
3 |
4 | import com.github.aleksandermielczarek.observablecache2.CacheableCompletable;
5 | import com.github.aleksandermielczarek.observablecache2.CacheableFlowable;
6 | import com.github.aleksandermielczarek.observablecache2.CacheableMaybe;
7 | import com.github.aleksandermielczarek.observablecache2.CacheableObservable;
8 | import com.github.aleksandermielczarek.observablecache2.CacheableSingle;
9 | import com.github.aleksandermielczarek.observablecache2.CompletableFromCache;
10 | import com.github.aleksandermielczarek.observablecache2.FlowableFromCache;
11 | import com.github.aleksandermielczarek.observablecache2.MaybeFromCache;
12 | import com.github.aleksandermielczarek.observablecache2.ObservableFromCache;
13 | import com.github.aleksandermielczarek.observablecache2.SingleFromCache;
14 | import com.github.aleksandermielczarek.observablecache2.service.annotations.ObservableCacheService;
15 |
16 | /**
17 | * Created by Aleksander Mielczarek on 10.02.2017.
18 | */
19 |
20 | @ObservableCacheService
21 | public interface Cached2Service {
22 |
23 | CacheableFlowable flowable();
24 |
25 | FlowableFromCache cachedFlowable();
26 |
27 | CacheableObservable observable();
28 |
29 | ObservableFromCache cachedObservable();
30 |
31 | CacheableSingle single();
32 |
33 | SingleFromCache cachedSingle();
34 |
35 | CacheableMaybe maybe();
36 |
37 | MaybeFromCache cachedMaybe();
38 |
39 | CacheableCompletable completable();
40 |
41 | CompletableFromCache cachedCompletable();
42 |
43 | CacheableFlowable flowableError();
44 |
45 | FlowableFromCache cachedFlowableError();
46 |
47 | CacheableObservable observableError();
48 |
49 | ObservableFromCache cachedObservableError();
50 |
51 | CacheableSingle singleError();
52 |
53 | SingleFromCache cachedSingleError();
54 |
55 | CacheableMaybe maybeError();
56 |
57 | MaybeFromCache cachedMaybeError();
58 |
59 | CacheableCompletable completableError();
60 |
61 | CompletableFromCache cachedCompletableError();
62 | }
63 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/aleksandermielczarek/observablecacheexample/service/Observable2Service.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecacheexample.service;
2 |
3 | import android.util.Log;
4 |
5 | import java.util.concurrent.TimeUnit;
6 |
7 | import io.reactivex.Completable;
8 | import io.reactivex.Flowable;
9 | import io.reactivex.Maybe;
10 | import io.reactivex.Observable;
11 | import io.reactivex.Single;
12 |
13 |
14 | /**
15 | * Created by Aleksander Mielczarek on 09.02.2017.
16 | */
17 |
18 | public class Observable2Service {
19 |
20 | public static final int DELAY = 4;
21 | public static final TimeUnit TIME_UNIT = TimeUnit.SECONDS;
22 |
23 | public Flowable flowable() {
24 | return Flowable.fromCallable(() -> "flowable")
25 | .delay(DELAY, TIME_UNIT);
26 | }
27 |
28 | public Observable observable() {
29 | return Observable.fromCallable(() -> "observable")
30 | .delay(DELAY, TIME_UNIT);
31 | }
32 |
33 | public Maybe maybe() {
34 | return Maybe.fromCallable(() -> "maybe")
35 | .delay(DELAY, TIME_UNIT);
36 | }
37 |
38 | public Single single() {
39 | return Single.fromCallable(() -> "single")
40 | .delay(DELAY, TIME_UNIT);
41 | }
42 |
43 | public Completable completable() {
44 | return Completable.fromCallable(() -> null)
45 | .delay(DELAY, TIME_UNIT);
46 | }
47 |
48 | public Flowable flowableError() {
49 | return flowable().doOnNext(observable -> {
50 | throw new IllegalArgumentException("flowableError");
51 | }).doOnError(throwable -> Log.e("ERROR", throwable.getMessage()));
52 | }
53 |
54 | public Observable observableError() {
55 | return observable().doOnNext(observable -> {
56 | throw new IllegalArgumentException("observableError");
57 | }).doOnError(throwable -> Log.e("ERROR", throwable.getMessage()));
58 | }
59 |
60 | public Maybe maybeError() {
61 | return maybe().doOnSuccess(single -> {
62 | throw new IllegalArgumentException("maybeError");
63 | }).doOnError(throwable -> Log.e("ERROR", throwable.getMessage()));
64 | }
65 |
66 | public Single singleError() {
67 | return single().doOnSuccess(single -> {
68 | throw new IllegalArgumentException("singleError");
69 | }).doOnError(throwable -> Log.e("ERROR", throwable.getMessage()));
70 | }
71 |
72 | public Completable completableError() {
73 | return completable().doOnComplete(() -> {
74 | throw new IllegalArgumentException("completableError");
75 | }).doOnError(throwable -> Log.e("ERROR", throwable.getMessage()));
76 | }
77 |
78 | }
79 |
--------------------------------------------------------------------------------
/observable-cache-1-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache/service/processor/ObservableCacheServiceProcessor.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache.service.processor;
2 |
3 | import com.github.aleksandermielczarek.observablecache.service.annotations.ObservableCacheService;
4 | import com.github.aleksandermielczarek.observablecache.service.processor.api.AbstractObservableCacheServiceProcessor;
5 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
6 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.ExtendMethod;
7 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.RemoveExtendMethod;
8 | import com.github.aleksandermielczarek.observablecache.service.processor.method.base.CompletableBaseMethod;
9 | import com.github.aleksandermielczarek.observablecache.service.processor.method.base.ObservableBaseMethod;
10 | import com.github.aleksandermielczarek.observablecache.service.processor.method.base.SingleBaseMethod;
11 | import com.github.aleksandermielczarek.observablecache.service.processor.method.extend.CompletableExtendMethod;
12 | import com.github.aleksandermielczarek.observablecache.service.processor.method.extend.ObservableExtendMethod;
13 | import com.github.aleksandermielczarek.observablecache.service.processor.method.extend.SingleExtendMethod;
14 | import com.google.auto.service.AutoService;
15 |
16 | import java.lang.annotation.Annotation;
17 | import java.util.Arrays;
18 | import java.util.List;
19 |
20 | import javax.annotation.processing.Processor;
21 | import javax.annotation.processing.SupportedAnnotationTypes;
22 | import javax.annotation.processing.SupportedSourceVersion;
23 | import javax.lang.model.SourceVersion;
24 |
25 | /**
26 | * Created by Aleksander Mielczarek on 30.10.2016.
27 | */
28 | @AutoService(Processor.class)
29 | @SupportedAnnotationTypes("com.github.aleksandermielczarek.observablecache.service.annotations.ObservableCacheService")
30 | @SupportedSourceVersion(SourceVersion.RELEASE_8)
31 | public class ObservableCacheServiceProcessor extends AbstractObservableCacheServiceProcessor {
32 |
33 | @Override
34 | protected List baseMethods() {
35 | return Arrays.asList(new CompletableBaseMethod(), new ObservableBaseMethod(), new SingleBaseMethod());
36 | }
37 |
38 | @Override
39 | protected List extendMethods() {
40 | return Arrays.asList(new CompletableExtendMethod(), new ObservableExtendMethod(), new RemoveExtendMethod(), new SingleExtendMethod());
41 | }
42 |
43 | @Override
44 | protected Class extends Annotation> serviceAnnotation() {
45 | return ObservableCacheService.class;
46 | }
47 |
48 | @Override
49 | protected String observableCachePackage() {
50 | return "com.github.aleksandermielczarek.observablecache";
51 | }
52 |
53 | @Override
54 | protected String servicePackage() {
55 | return "com.github.aleksandermielczarek.observablecache.service";
56 | }
57 |
58 | @Override
59 | protected String observableCacheClassName() {
60 | return "ObservableCache";
61 | }
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/MapObservableCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import java.util.HashMap;
6 | import java.util.Map;
7 |
8 | import rx.Observable;
9 | import rx.Single;
10 |
11 | /**
12 | * Created by Aleksander Mielczarek on 30.10.2016.
13 | */
14 |
15 | public final class MapObservableCache extends ObservableCache {
16 |
17 | private static volatile ObservableCache defaultInstance;
18 |
19 | private final Map> observables;
20 | private final Map> singles;
21 |
22 | private MapObservableCache() {
23 | observables = new HashMap<>();
24 | singles = new HashMap<>();
25 | }
26 |
27 | private MapObservableCache(int size) {
28 | observables = new HashMap<>(size);
29 | singles = new HashMap<>(size);
30 | }
31 |
32 | public static ObservableCache getDefault() {
33 | if (defaultInstance == null) {
34 | synchronized (ObservableCache.class) {
35 | if (defaultInstance == null) {
36 | defaultInstance = newInstance();
37 | }
38 | }
39 | }
40 | return defaultInstance;
41 | }
42 |
43 | public static ObservableCache newInstance() {
44 | return new MapObservableCache();
45 | }
46 |
47 | public static ObservableCache newInstance(int size) {
48 | return new MapObservableCache(size);
49 | }
50 |
51 | @Override
52 | protected void cache(String key, Observable observable) {
53 | observables.put(key, observable);
54 | }
55 |
56 | @Override
57 | protected void cache(String key, Single single) {
58 | singles.put(key, single);
59 | }
60 |
61 | @Override
62 | public boolean clear() {
63 | boolean empty = isEmpty();
64 | observables.clear();
65 | singles.clear();
66 | return !empty;
67 | }
68 |
69 | @Override
70 | public boolean remove(String key) {
71 | Observable> removedObservable = observables.remove(key);
72 | Single> removedSingle = singles.remove(key);
73 | return removedObservable != null || removedSingle != null;
74 | }
75 |
76 | @Override
77 | public int size() {
78 | return observables.size() + singles.size();
79 | }
80 |
81 | @Override
82 | public boolean exists(String key) {
83 | return observables.containsKey(key) || singles.containsKey(key);
84 | }
85 |
86 | @Override
87 | public boolean isEmpty() {
88 | return observables.isEmpty() && singles.isEmpty();
89 | }
90 |
91 | @Override
92 | @Nullable
93 | @SuppressWarnings("unchecked")
94 | protected Observable getObservableFromCache(String key) {
95 | return (Observable) observables.get(key);
96 | }
97 |
98 | @Nullable
99 | @Override
100 | @SuppressWarnings("unchecked")
101 | protected Single getSingleFromCache(String key) {
102 | return (Single) singles.get(key);
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/ObservableCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.Cache;
6 |
7 | import rx.Completable;
8 | import rx.Observable;
9 | import rx.Single;
10 | import rx.functions.Action0;
11 |
12 | /**
13 | * Created by Aleksander Mielczarek on 29.10.2016.
14 | */
15 |
16 | public abstract class ObservableCache implements Cache {
17 |
18 | protected abstract void cache(String key, Observable observable);
19 |
20 | protected abstract void cache(String key, Single single);
21 |
22 | @Nullable
23 | protected abstract Observable getObservableFromCache(String key);
24 |
25 | @Nullable
26 | protected abstract Single getSingleFromCache(String key);
27 |
28 | private void cache(String key, Completable completable) {
29 | Observable> observable = completable.toObservable();
30 | cache(key, observable);
31 | }
32 |
33 | public CacheableObservable cacheObservable(String key) {
34 | return new CacheableObservable<>(key, this);
35 | }
36 |
37 | public CacheableCompletable cacheCompletable(String key) {
38 | return new CacheableCompletable(key, this);
39 | }
40 |
41 | public CacheableSingle cacheSingle(String key) {
42 | return new CacheableSingle<>(key, this);
43 | }
44 |
45 | public ObservableFromCache getObservable(String key) {
46 | Observable observableFromCache = getObservableFromCache(key);
47 | return new ObservableFromCache<>(observableFromCache);
48 | }
49 |
50 | public SingleFromCache getSingle(String key) {
51 | Single singleFromCache = getSingleFromCache(key);
52 | return new SingleFromCache<>(singleFromCache);
53 | }
54 |
55 | public CompletableFromCache getCompletable(String key) {
56 | Observable> observableFromCache = getObservableFromCache(key);
57 | if (observableFromCache != null) {
58 | return new CompletableFromCache(observableFromCache.toCompletable());
59 | }
60 | return new CompletableFromCache(null);
61 | }
62 |
63 | Observable cacheObservable(final String key, Observable observable) {
64 | Observable cached = observable.cache().doOnTerminate(new Action0() {
65 | @Override
66 | public void call() {
67 | remove(key);
68 | }
69 | });
70 | cache(key, cached);
71 | return cached;
72 | }
73 |
74 | Single cacheSingle(final String key, Single single) {
75 | Single cached = single.cache().doAfterTerminate(new Action0() {
76 | @Override
77 | public void call() {
78 | remove(key);
79 | }
80 | });
81 | cache(key, cached);
82 | return cached;
83 | }
84 |
85 | Completable cacheCompletable(String key, Completable completable) {
86 | Observable> observable = completable.toObservable();
87 | Observable> cachedObservable = cacheObservable(key, observable);
88 | return cachedObservable.toCompletable();
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/observable-cache-1/src/main/java/com/github/aleksandermielczarek/observablecache/LruObservableCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache;
2 |
3 |
4 | import android.support.annotation.Nullable;
5 | import android.util.LruCache;
6 |
7 | import rx.Observable;
8 | import rx.Single;
9 |
10 | /**
11 | * Created by Aleksander Mielczarek on 30.10.2016.
12 | */
13 |
14 | public final class LruObservableCache extends ObservableCache {
15 |
16 | public static final int DEFAULT_CACHE_SIZE = 16;
17 |
18 | private static volatile ObservableCache defaultInstance;
19 |
20 | private final LruCache> observables;
21 | private final LruCache> singles;
22 |
23 | private LruObservableCache() {
24 | observables = new LruCache<>(DEFAULT_CACHE_SIZE);
25 | singles = new LruCache<>(DEFAULT_CACHE_SIZE);
26 | }
27 |
28 | private LruObservableCache(int size) {
29 | observables = new LruCache<>(size);
30 | singles = new LruCache<>(size);
31 | }
32 |
33 | public static ObservableCache getDefault() {
34 | if (defaultInstance == null) {
35 | synchronized (ObservableCache.class) {
36 | if (defaultInstance == null) {
37 | defaultInstance = newInstance();
38 | }
39 | }
40 | }
41 | return defaultInstance;
42 | }
43 |
44 | public static ObservableCache newInstance() {
45 | return new LruObservableCache();
46 | }
47 |
48 | public static ObservableCache newInstance(int size) {
49 | return new LruObservableCache(size);
50 | }
51 |
52 | @Override
53 | protected void cache(String key, Observable observable) {
54 | observables.put(key, observable);
55 | }
56 |
57 | @Override
58 | protected void cache(String key, Single single) {
59 | singles.put(key, single);
60 | }
61 |
62 | @Override
63 | public boolean clear() {
64 | boolean empty = isEmpty();
65 | observables.evictAll();
66 | singles.evictAll();
67 | return !empty;
68 | }
69 |
70 | @Override
71 | public boolean remove(String key) {
72 | Observable> observable = observables.remove(key);
73 | Single> removedSingle = singles.remove(key);
74 | return observable != null || removedSingle != null;
75 | }
76 |
77 | @Override
78 | public int size() {
79 | return observables.size() + singles.size();
80 | }
81 |
82 | @Override
83 | public boolean exists(String key) {
84 | return observables.get(key) != null || singles.get(key) != null;
85 | }
86 |
87 | @Override
88 | public boolean isEmpty() {
89 | return size() == 0;
90 | }
91 |
92 | @Override
93 | @Nullable
94 | @SuppressWarnings("unchecked")
95 | protected Observable getObservableFromCache(String key) {
96 | return (Observable) observables.get(key);
97 | }
98 |
99 | @Nullable
100 | @Override
101 | @SuppressWarnings("unchecked")
102 | protected Single getSingleFromCache(String key) {
103 | return (Single) singles.get(key);
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 | apply plugin: 'me.tatarka.retrolambda'
3 |
4 | android {
5 | compileSdkVersion sdkVersion
6 | buildToolsVersion buildToolsVersionVersion
7 |
8 | defaultConfig {
9 | applicationId "com.github.aleksandermielczarek.observablecacheexample"
10 | minSdkVersion minSdkVersionVersion
11 | targetSdkVersion sdkVersion
12 | versionCode versionMajor * 1000000 + versionMinor * 10000 + versionFix * 100
13 | versionName "$versionMajor.$versionMinor.$versionFix"
14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15 | }
16 | dataBinding {
17 | enabled = true
18 | }
19 | buildTypes {
20 | release {
21 | minifyEnabled false
22 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23 | }
24 | }
25 | compileOptions {
26 | sourceCompatibility JavaVersion.VERSION_1_8
27 | targetCompatibility JavaVersion.VERSION_1_8
28 | }
29 | packagingOptions {
30 | exclude 'META-INF/rxjava.properties'
31 | }
32 | }
33 |
34 | dependencies {
35 | compile fileTree(dir: 'libs', include: ['*.jar'])
36 |
37 | //test
38 | androidTestCompile("com.android.support.test.espresso:espresso-core:$espressoCoreVersion", {
39 | exclude group: 'com.android.support', module: 'support-annotations'
40 | })
41 | testCompile "junit:junit:$junitVersion"
42 | androidTestAnnotationProcessor project(':observable-cache-1-service-processor')
43 | androidTestAnnotationProcessor project(':observable-cache-2-service-processor')
44 |
45 | //support
46 | compile "com.android.support:appcompat-v7:$supportLibraryVersion"
47 |
48 | //dagger
49 | compile "com.google.dagger:dagger:$daggerVersion"
50 | annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
51 | compile "com.github.AleksanderMielczarek.Napkin:napkin:$napkinVersion@aar"
52 | compile "com.github.AleksanderMielczarek.Napkin:module:$napkinVersion@aar"
53 | compile "com.github.AleksanderMielczarek.Napkin:scope:$napkinVersion"
54 | compile "com.github.AleksanderMielczarek.Napkin:qualifier:$napkinVersion"
55 |
56 | //rx
57 | compile "io.reactivex:rxandroid:$rxandroidVersion"
58 | compile "io.reactivex:rxjava:$rxjavaVersion"
59 | annotationProcessor project(':observable-cache-1-service-processor')
60 | compile project(':observable-cache-1-service')
61 |
62 | //rx2
63 | compile "io.reactivex.rxjava2:rxandroid:$rxandroid2Version"
64 | compile "io.reactivex.rxjava2:rxjava:$rxjava2Version"
65 | annotationProcessor project(':observable-cache-2-service-processor')
66 | compile project(':observable-cache-2-service')
67 |
68 | //utils
69 | annotationProcessor "org.androidannotations:androidannotations:$androidannotationsVersion"
70 | compile "org.androidannotations:androidannotations-api:$androidannotationsVersion"
71 | compile "org.parceler:parceler-api:$parcelerVersion"
72 | annotationProcessor "org.parceler:parceler:$parcelerVersion"
73 | }
74 |
75 | android.applicationVariants.all { variant ->
76 | variant.variantData.variantConfiguration.javaCompileOptions.annotationProcessorOptions.arguments =
77 | ['androidManifestFile': variant.outputs[0]?.processResources?.manifestFile?.absolutePath,
78 | 'resourcePackageName': android.defaultConfig.applicationId]
79 | }
80 |
--------------------------------------------------------------------------------
/observable-cache-2-service-processor/src/main/java/com/github/aleksandermielczarek/observablecache2/service/processor/ObservableCacheServiceProcessor.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2.service.processor;
2 |
3 | import com.github.aleksandermielczarek.observablecache2.service.annotations.ObservableCacheService;
4 | import com.github.aleksandermielczarek.observablecache.service.processor.api.AbstractObservableCacheServiceProcessor;
5 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.base.BaseMethod;
6 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.ExtendMethod;
7 | import com.github.aleksandermielczarek.observablecache.service.processor.api.method.extend.RemoveExtendMethod;
8 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.base.CompletableBaseMethod;
9 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.base.FlowableBaseMethod;
10 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.base.MaybeBaseMethod;
11 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.base.ObservableBaseMethod;
12 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.base.SingleBaseMethod;
13 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.extend.CompletableExtendMethod;
14 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.extend.FlowableExtendMethod;
15 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.extend.MaybeExtendMethod;
16 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.extend.ObservableExtendMethod;
17 | import com.github.aleksandermielczarek.observablecache2.service.processor.method.extend.SingleExtendMethod;
18 | import com.google.auto.service.AutoService;
19 |
20 | import java.lang.annotation.Annotation;
21 | import java.util.Arrays;
22 | import java.util.List;
23 |
24 | import javax.annotation.processing.Processor;
25 | import javax.annotation.processing.SupportedAnnotationTypes;
26 | import javax.annotation.processing.SupportedSourceVersion;
27 | import javax.lang.model.SourceVersion;
28 |
29 | /**
30 | * Created by Aleksander Mielczarek on 09.02.2017.
31 | */
32 | @AutoService(Processor.class)
33 | @SupportedAnnotationTypes("com.github.aleksandermielczarek.observablecache2.service.annotations.ObservableCacheService")
34 | @SupportedSourceVersion(SourceVersion.RELEASE_8)
35 | public class ObservableCacheServiceProcessor extends AbstractObservableCacheServiceProcessor {
36 |
37 | @Override
38 | protected List baseMethods() {
39 | return Arrays.asList(new FlowableBaseMethod(),
40 | new ObservableBaseMethod(),
41 | new SingleBaseMethod(),
42 | new MaybeBaseMethod(),
43 | new CompletableBaseMethod());
44 | }
45 |
46 | @Override
47 | protected List extendMethods() {
48 | return Arrays.asList(new FlowableExtendMethod(),
49 | new ObservableExtendMethod(),
50 | new SingleExtendMethod(),
51 | new MaybeExtendMethod(),
52 | new CompletableExtendMethod(),
53 | new RemoveExtendMethod());
54 | }
55 |
56 | @Override
57 | protected Class extends Annotation> serviceAnnotation() {
58 | return ObservableCacheService.class;
59 | }
60 |
61 | @Override
62 | protected String observableCachePackage() {
63 | return "com.github.aleksandermielczarek.observablecache2";
64 | }
65 |
66 | @Override
67 | protected String servicePackage() {
68 | return "com.github.aleksandermielczarek.observablecache2.service";
69 | }
70 |
71 | @Override
72 | protected String observableCacheClassName() {
73 | return "ObservableCache";
74 | }
75 |
76 | }
77 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_observable1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
11 |
14 |
15 |
19 |
20 |
25 |
26 |
31 |
32 |
37 |
38 |
43 |
44 |
49 |
50 |
55 |
56 |
61 |
62 |
67 |
68 |
73 |
74 |
79 |
80 |
85 |
86 |
91 |
92 |
97 |
98 |
103 |
104 |
108 |
109 |
110 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/ObservableCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.github.aleksandermielczarek.observablecache.api.Cache;
6 |
7 | import io.reactivex.Completable;
8 | import io.reactivex.Flowable;
9 | import io.reactivex.Maybe;
10 | import io.reactivex.Observable;
11 | import io.reactivex.Single;
12 | import io.reactivex.functions.Action;
13 |
14 | /**
15 | * Created by Aleksander Mielczarek on 09.02.2017.
16 | */
17 |
18 | public abstract class ObservableCache implements Cache {
19 |
20 | protected abstract void cache(String key, Flowable flowable);
21 |
22 | protected abstract void cache(String key, Observable observable);
23 |
24 | protected abstract void cache(String key, Single single);
25 |
26 | protected abstract void cache(String key, Completable completable);
27 |
28 | protected abstract void cache(String key, Maybe maybe);
29 |
30 | @Nullable
31 | protected abstract Flowable getFlowableFromCache(String key);
32 |
33 | @Nullable
34 | protected abstract Observable getObservableFromCache(String key);
35 |
36 | @Nullable
37 | protected abstract Single getSingleFromCache(String key);
38 |
39 | @Nullable
40 | protected abstract Completable getCompletableFromCache(String key);
41 |
42 | @Nullable
43 | protected abstract Maybe getMaybeFromCache(String key);
44 |
45 | public CacheableFlowable cacheFlowable(String key) {
46 | return new CacheableFlowable<>(key, this);
47 | }
48 |
49 | public CacheableObservable cacheObservable(String key) {
50 | return new CacheableObservable<>(key, this);
51 | }
52 |
53 | public CacheableSingle cacheSingle(String key) {
54 | return new CacheableSingle<>(key, this);
55 | }
56 |
57 | public CacheableCompletable cacheCompletable(String key) {
58 | return new CacheableCompletable(key, this);
59 | }
60 |
61 | public CacheableMaybe cacheMaybe(String key) {
62 | return new CacheableMaybe<>(key, this);
63 | }
64 |
65 | public FlowableFromCache getFlowable(String key) {
66 | Flowable flowableFromCache = getFlowableFromCache(key);
67 | return new FlowableFromCache<>(flowableFromCache);
68 | }
69 |
70 | public ObservableFromCache getObservable(String key) {
71 | Observable observableFromCache = getObservableFromCache(key);
72 | return new ObservableFromCache<>(observableFromCache);
73 | }
74 |
75 | public SingleFromCache getSingle(String key) {
76 | Single singleFromCache = getSingleFromCache(key);
77 | return new SingleFromCache<>(singleFromCache);
78 | }
79 |
80 | public CompletableFromCache getCompletable(String key) {
81 | Completable completableFromCache = getCompletableFromCache(key);
82 | return new CompletableFromCache(completableFromCache);
83 | }
84 |
85 | public MaybeFromCache getMaybe(String key) {
86 | Maybe maybeFromCache = getMaybeFromCache(key);
87 | return new MaybeFromCache<>(maybeFromCache);
88 | }
89 |
90 | Flowable cacheFlowable(final String key, Flowable flowable) {
91 | Flowable cached = flowable.cache().doOnTerminate(new Action() {
92 | @Override
93 | public void run() throws Exception {
94 | remove(key);
95 | }
96 | });
97 | cache(key, cached);
98 | return cached;
99 | }
100 |
101 | Observable cacheObservable(final String key, Observable observable) {
102 | Observable cached = observable.cache().doAfterTerminate(new Action() {
103 | @Override
104 | public void run() throws Exception {
105 | remove(key);
106 | }
107 | });
108 | cache(key, cached);
109 | return cached;
110 | }
111 |
112 | Single cacheSingle(final String key, Single single) {
113 | Single cached = single.cache().doAfterTerminate(new Action() {
114 | @Override
115 | public void run() throws Exception {
116 | remove(key);
117 | }
118 | });
119 | cache(key, cached);
120 | return cached;
121 | }
122 |
123 | Completable cacheCompletable(final String key, Completable completable) {
124 | Completable cached = completable.cache().doAfterTerminate(new Action() {
125 | @Override
126 | public void run() throws Exception {
127 | remove(key);
128 | }
129 | });
130 | cache(key, cached);
131 | return cached;
132 | }
133 |
134 | Maybe cacheMaybe(final String key, Maybe maybe) {
135 | Maybe cached = maybe.cache().doAfterTerminate(new Action() {
136 | @Override
137 | public void run() throws Exception {
138 | remove(key);
139 | }
140 | });
141 | cache(key, cached);
142 | return cached;
143 | }
144 |
145 | }
146 |
--------------------------------------------------------------------------------
/observable-cache-2/src/main/java/com/github/aleksandermielczarek/observablecache2/MapObservableCache.java:
--------------------------------------------------------------------------------
1 | package com.github.aleksandermielczarek.observablecache2;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import java.util.HashMap;
6 | import java.util.Map;
7 |
8 | import io.reactivex.Completable;
9 | import io.reactivex.Flowable;
10 | import io.reactivex.Maybe;
11 | import io.reactivex.Observable;
12 | import io.reactivex.Single;
13 |
14 | /**
15 | * Created by Aleksander Mielczarek on 09.02.2017.
16 | */
17 |
18 | public final class MapObservableCache extends ObservableCache {
19 |
20 | private static volatile ObservableCache defaultInstance;
21 |
22 | private final Map> flowables;
23 | private final Map> observables;
24 | private final Map> singles;
25 | private final Map completables;
26 | private final Map> maybes;
27 |
28 | private MapObservableCache() {
29 | flowables = new HashMap<>();
30 | observables = new HashMap<>();
31 | singles = new HashMap<>();
32 | completables = new HashMap<>();
33 | maybes = new HashMap<>();
34 | }
35 |
36 | private MapObservableCache(int size) {
37 | flowables = new HashMap<>(size);
38 | observables = new HashMap<>(size);
39 | singles = new HashMap<>(size);
40 | completables = new HashMap<>(size);
41 | maybes = new HashMap<>(size);
42 | }
43 |
44 | public static ObservableCache getDefault() {
45 | if (defaultInstance == null) {
46 | synchronized (ObservableCache.class) {
47 | if (defaultInstance == null) {
48 | defaultInstance = newInstance();
49 | }
50 | }
51 | }
52 | return defaultInstance;
53 | }
54 |
55 | public static ObservableCache newInstance() {
56 | return new MapObservableCache();
57 | }
58 |
59 | public static ObservableCache newInstance(int size) {
60 | return new MapObservableCache(size);
61 | }
62 |
63 | @Override
64 | protected void cache(String key, Flowable flowable) {
65 | flowables.put(key, flowable);
66 | }
67 |
68 | @Override
69 | protected void cache(String key, Observable observable) {
70 | observables.put(key, observable);
71 | }
72 |
73 | @Override
74 | protected