├── .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 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 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 |