├── frodo-runtime ├── .gitignore ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── fernandocejas │ │ │ └── frodo │ │ │ ├── core │ │ │ ├── annotations │ │ │ │ └── VisibleForTesting.java │ │ │ ├── collections │ │ │ │ ├── UnmodifiableIterator.java │ │ │ │ └── AbstractIterator.java │ │ │ ├── functions │ │ │ │ ├── Predicate.java │ │ │ │ ├── Function.java │ │ │ │ └── Functions.java │ │ │ ├── strings │ │ │ │ ├── Strings.java │ │ │ │ ├── Charsets.java │ │ │ │ └── Joiner.java │ │ │ └── optional │ │ │ │ ├── Present.java │ │ │ │ ├── Absent.java │ │ │ │ └── Optional.java │ │ │ ├── internal │ │ │ ├── DebugLog.java │ │ │ ├── observable │ │ │ │ ├── LogNothingObservable.java │ │ │ │ ├── LoggableObservable.java │ │ │ │ ├── FrodoObservable.java │ │ │ │ ├── LogSchedulersObservable.java │ │ │ │ ├── LoggableObservableFactory.java │ │ │ │ ├── ObservableInfo.java │ │ │ │ ├── LogEventsObservable.java │ │ │ │ ├── LogStreamObservable.java │ │ │ │ └── LogEverythingObservable.java │ │ │ ├── StopWatch.java │ │ │ ├── Counter.java │ │ │ ├── MessageManager.java │ │ │ └── MessageBuilder.java │ │ │ ├── joinpoint │ │ │ ├── FrodoProceedingJoinPoint.java │ │ │ └── FrodoJoinPoint.java │ │ │ └── aspect │ │ │ ├── LogObservable.java │ │ │ └── LogSubscriber.java │ └── test │ │ └── java │ │ └── com │ │ └── fernandocejas │ │ └── frodo │ │ ├── ApplicationStub.java │ │ ├── aspect │ │ ├── LogObservableTest.java │ │ └── LogSubscriberTest.java │ │ ├── internal │ │ ├── StopWatchTest.java │ │ ├── observable │ │ │ ├── LogNothingObservableTest.java │ │ │ ├── LogEventsObservableTest.java │ │ │ ├── ObservableRule.java │ │ │ ├── FrodoObservableTest.java │ │ │ ├── LogSchedulersObservableTest.java │ │ │ ├── LogStreamObservableTest.java │ │ │ ├── ObservableInfoTest.java │ │ │ ├── LoggableObservableFactoryTest.java │ │ │ └── LogEverythingObservableTest.java │ │ └── CounterTest.java │ │ ├── joinpoint │ │ ├── FrodoProceedingJoinPointTest.java │ │ ├── TestProceedingJoinPoint.java │ │ ├── FrodoJoinPointTest.java │ │ └── TestJoinPoint.java │ │ └── AndroidUnitTest.java ├── proguard-rules.pro └── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── frodo-android-sample ├── debug.keystore ├── src │ └── main │ │ ├── res │ │ ├── drawable-hdpi │ │ │ ├── logo.png │ │ │ └── ic_launcher.png │ │ ├── drawable-mdpi │ │ │ └── ic_launcher.png │ │ ├── drawable-xhdpi │ │ │ └── ic_launcher.png │ │ ├── drawable-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── values │ │ │ ├── dimens.xml │ │ │ ├── styles.xml │ │ │ └── strings.xml │ │ └── layout │ │ │ ├── activity_main.xml │ │ │ └── activity_samples.xml │ │ ├── java │ │ └── com │ │ │ └── fernandocejas │ │ │ └── example │ │ │ └── frodo │ │ │ ├── sample │ │ │ ├── MySubscriberVoid.java │ │ │ ├── MySubscriber.java │ │ │ ├── MySubscriberBackpressure.java │ │ │ └── ObservableSample.java │ │ │ ├── MainActivity.java │ │ │ ├── DataPresenter.java │ │ │ └── SamplesActivity.java │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── frodo-plugin ├── src │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── gradle-plugins │ │ │ └── com.fernandocejas.frodo.properties │ │ └── groovy │ │ └── com │ │ └── fernandocejas │ │ └── frodo │ │ └── plugin │ │ ├── FrodoEnablerExtension.groovy │ │ └── FrodoPlugin.groovy └── build.gradle ├── install_frodo.bat ├── install_frodo.sh ├── frodo-api ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── fernandocejas │ └── frodo │ └── annotation │ ├── RxLogSubscriber.java │ └── RxLogObservable.java ├── .gitignore ├── gradle.properties ├── CHANGELOG.txt ├── dev.txt ├── gradlew.bat ├── gradlew └── README.md /frodo-runtime/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android10/frodo/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /frodo-android-sample/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android10/frodo/HEAD/frodo-android-sample/debug.keystore -------------------------------------------------------------------------------- /frodo-runtime/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':frodo-android-sample' 2 | include ':frodo-plugin' 3 | include ':frodo-api' 4 | include ':frodo-runtime' 5 | -------------------------------------------------------------------------------- /frodo-plugin/src/main/resources/META-INF/gradle-plugins/com.fernandocejas.frodo.properties: -------------------------------------------------------------------------------- 1 | implementation-class=com.fernandocejas.frodo.plugin.FrodoPlugin -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/drawable-hdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android10/frodo/HEAD/frodo-android-sample/src/main/res/drawable-hdpi/logo.png -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android10/frodo/HEAD/frodo-android-sample/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android10/frodo/HEAD/frodo-android-sample/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android10/frodo/HEAD/frodo-android-sample/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android10/frodo/HEAD/frodo-android-sample/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /frodo-runtime/src/test/java/com/fernandocejas/frodo/ApplicationStub.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo; 2 | 3 | import android.app.Application; 4 | 5 | public class ApplicationStub extends Application { 6 | } 7 | 8 | -------------------------------------------------------------------------------- /install_frodo.bat: -------------------------------------------------------------------------------- 1 | gradlew -p frodo-api/ assemble install --configure-on-demand 2 | gradlew -p frodo-runtime/ assembleDebug install --configure-on-demand -x lint 3 | gradlew -p frodo-plugin/ build install --configure-on-demand -------------------------------------------------------------------------------- /install_frodo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ./gradlew -p frodo-api/ clean assemble install --configure-on-demand 3 | ./gradlew -p frodo-runtime/ clean assembleDebug install --configure-on-demand -x lint 4 | ./gradlew -p frodo-plugin/ clean build install --configure-on-demand -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun Oct 25 19:57:33 CET 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-2.12-all.zip 7 | -------------------------------------------------------------------------------- /frodo-plugin/src/main/groovy/com/fernandocejas/frodo/plugin/FrodoEnablerExtension.groovy: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.plugin 2 | 3 | class FrodoEnablerExtension { 4 | def enabled = true 5 | 6 | def setEnabled(boolean enabled) { 7 | this.enabled = enabled 8 | } 9 | 10 | def getEnabled() { 11 | return enabled; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | 10dp 7 | 5dp 8 | 9 | -------------------------------------------------------------------------------- /frodo-api/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | maven { 4 | url "http://dl.bintray.com/android10/maven" 5 | } 6 | } 7 | } 8 | 9 | repositories { 10 | maven { 11 | url "http://dl.bintray.com/android10/maven" 12 | } 13 | } 14 | 15 | //noinspection GroovyAssignabilityCheck 16 | task javadocJar(type: Jar, dependsOn: ['javadoc']) { 17 | classifier = 'javadoc' 18 | from 'build/docs/javadoc' 19 | } -------------------------------------------------------------------------------- /frodo-runtime/src/main/java/com/fernandocejas/frodo/core/annotations/VisibleForTesting.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.core.annotations; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | /** 7 | * Denotes that the class, method or field has its visibility relaxed, so that it is more widely 8 | * visible than otherwise necessary to make code testable. 9 | */ 10 | @Retention(RetentionPolicy.SOURCE) 11 | public @interface VisibleForTesting { 12 | } 13 | -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/sample/MySubscriberVoid.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.example.frodo.sample; 2 | 3 | import com.fernandocejas.frodo.annotation.RxLogSubscriber; 4 | import rx.Subscriber; 5 | 6 | @RxLogSubscriber 7 | public class MySubscriberVoid extends Subscriber { 8 | @Override public void onCompleted() { 9 | //empty 10 | } 11 | 12 | @Override public void onError(Throwable e) { 13 | //empty 14 | } 15 | 16 | @Override public void onNext(Void aVoid) { 17 | //empty 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/sample/MySubscriber.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.example.frodo.sample; 2 | 3 | import com.fernandocejas.frodo.annotation.RxLogSubscriber; 4 | import rx.Subscriber; 5 | 6 | @RxLogSubscriber 7 | public class MySubscriber extends Subscriber { 8 | @Override 9 | public void onNext(String value) { 10 | //empty 11 | } 12 | 13 | @Override 14 | public void onError(Throwable throwable) { 15 | //empty 16 | } 17 | 18 | @Override 19 | public void onCompleted() { 20 | //empty 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /frodo-runtime/src/main/java/com/fernandocejas/frodo/internal/DebugLog.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.internal; 2 | 3 | import android.util.Log; 4 | 5 | /** 6 | * Wrapper around {@link android.util.Log} 7 | */ 8 | class DebugLog { 9 | 10 | DebugLog() { 11 | } 12 | 13 | /** 14 | * Send a debug log message 15 | * 16 | * @param tag Source of a log message. It usually identifies the class or activity where the log 17 | * call occurs. 18 | * @param message The message you would like logged. 19 | */ 20 | public void log(String tag, String message) { 21 | Log.d(tag, message); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows thumbnail db 2 | Thumbs.db 3 | 4 | # OSX files 5 | .DS_Store 6 | 7 | # built application files 8 | *.apk 9 | *.ap_ 10 | 11 | # files for the dex VM 12 | *.dex 13 | 14 | # Java class files 15 | *.class 16 | 17 | # generated files 18 | bin/ 19 | gen/ 20 | build/ 21 | 22 | # Local configuration file (sdk path, etc) 23 | local.properties 24 | 25 | # Eclipse project files 26 | .classpath 27 | .project 28 | 29 | # Android Studio 30 | .idea 31 | .gradle 32 | .gradletasknamecache 33 | /*/local.properties 34 | /*/out 35 | /*/*/build 36 | build 37 | /*/*/production 38 | *.iml 39 | *.iws 40 | *.ipr 41 | *~ 42 | *.swp -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | #Project Properties 2 | user=android10 3 | group=com.fernandocejas.frodo 4 | version=0.8.4 5 | website=https://github.com/android10/frodo 6 | 7 | #Configuration 8 | androidBuildToolsVersion=2.1.0 9 | buildToolsVersion=23.0.3 10 | compileSdkVersion=23 11 | minSdkVersion=14 12 | targetSdkVersion=21 13 | bintrayPluginVersion=0.3.4 14 | 15 | #Dependencies 16 | annotationsVersion=13.0 17 | aspectjVersion=1.8.6 18 | rxJavaVersion=1.0.14 19 | 20 | #Test dependencies 21 | junitVersion=4.12 22 | assertJVersion=1.7.1 23 | mockitoVersion=1.9.5 24 | robolectricVersion=3.0 25 | 26 | #Gradle Properties 27 | gradleVersion=2.12 28 | org.gradle.daemon=true 29 | org.gradle.parallel=true 30 | org.gradle.configureondemand=true 31 | -------------------------------------------------------------------------------- /frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/sample/MySubscriberBackpressure.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.example.frodo.sample; 2 | 3 | import com.fernandocejas.frodo.annotation.RxLogSubscriber; 4 | import rx.Subscriber; 5 | 6 | @RxLogSubscriber 7 | public class MySubscriberBackpressure extends Subscriber { 8 | 9 | @Override 10 | public void onStart() { 11 | request(40); 12 | } 13 | 14 | @Override 15 | public void onNext(Integer value) { 16 | //empty 17 | } 18 | 19 | @Override 20 | public void onError(Throwable throwable) { 21 | //empty 22 | } 23 | 24 | @Override 25 | public void onCompleted() { 26 | if (!isUnsubscribed()) { 27 | unsubscribe(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /frodo-runtime/src/main/java/com/fernandocejas/frodo/internal/observable/LogNothingObservable.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.internal.observable; 2 | 3 | import com.fernandocejas.frodo.internal.MessageManager; 4 | import com.fernandocejas.frodo.joinpoint.FrodoProceedingJoinPoint; 5 | import rx.Observable; 6 | 7 | @SuppressWarnings("unchecked") class LogNothingObservable extends LoggableObservable { 8 | 9 | LogNothingObservable(FrodoProceedingJoinPoint joinPoint, 10 | MessageManager messageManager, ObservableInfo observableInfo) { 11 | super(joinPoint, messageManager, observableInfo); 12 | } 13 | 14 | @Override Observable get(T type) throws Throwable { 15 | return ((Observable) joinPoint.proceed()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /frodo-runtime/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 /Users/fcejas/Software/SDKs/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 | -------------------------------------------------------------------------------- /frodo-android-sample/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 /Users/fcejas/Software/SDKs/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 | -------------------------------------------------------------------------------- /CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------- 2 | VERSION 0.8.4 3 | ---------------------------------------------------------- 4 | TODO 5 | 6 | ---------------------------------------------------------- 7 | VERSION 0.8.3 8 | ---------------------------------------------------------- 9 | FEATURE: Disable frodo via Gradle configuration. 10 | BUG FIX: NPE on @RxLogSubscriber. 11 | 12 | ---------------------------------------------------------- 13 | VERSION 0.8.2 14 | ---------------------------------------------------------- 15 | FEATURE: @RxLogObservable Logging Scope. 16 | 17 | ---------------------------------------------------------- 18 | VERSION 0.8.1 19 | ---------------------------------------------------------- 20 | FEATURE: @RxLogObservable Logging Scope. 21 | -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Frodo 4 | http://www.fernandocejas.com/ 5 | https://github.com/android10/frodo 6 | 7 | Frodo Examples 8 | 9 | Load Frodo Samples 10 | Rx Log Observable 11 | Rx Log Subscriber 12 | 13 | Do not forget to check the logcat to see the samples in action 14 | Non accessible view 15 | 16 | 17 | -------------------------------------------------------------------------------- /frodo-runtime/src/main/java/com/fernandocejas/frodo/joinpoint/FrodoProceedingJoinPoint.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.joinpoint; 2 | 3 | import org.aspectj.lang.ProceedingJoinPoint; 4 | 5 | public class FrodoProceedingJoinPoint extends FrodoJoinPoint { 6 | 7 | private final ProceedingJoinPoint proceedingJoinPoint; 8 | 9 | public FrodoProceedingJoinPoint(ProceedingJoinPoint proceedingJoinPoint) { 10 | super(proceedingJoinPoint); 11 | this.proceedingJoinPoint = proceedingJoinPoint; 12 | } 13 | 14 | /** 15 | * {@link ProceedingJoinPoint#proceed()} 16 | */ 17 | public Object proceed() throws Throwable { 18 | return proceedingJoinPoint.proceed(); 19 | } 20 | 21 | /** 22 | * {@link ProceedingJoinPoint#proceed(Object[])} 23 | */ 24 | public Object proceed(Object[] args) throws Throwable { 25 | return proceedingJoinPoint.proceed(args); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /frodo-android-sample/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /frodo-runtime/src/test/java/com/fernandocejas/frodo/aspect/LogObservableTest.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.aspect; 2 | 3 | import com.fernandocejas.frodo.joinpoint.TestJoinPoint; 4 | import com.fernandocejas.frodo.joinpoint.TestProceedingJoinPoint; 5 | import org.junit.Test; 6 | import org.junit.runner.RunWith; 7 | import org.mockito.runners.MockitoJUnitRunner; 8 | 9 | import static org.assertj.core.api.Assertions.assertThat; 10 | 11 | @RunWith(MockitoJUnitRunner.class) 12 | public class LogObservableTest { 13 | 14 | @Test 15 | public void shouldNotWeaveAroundMethodReturningOtherTypeThanObservable() { 16 | final TestJoinPoint joinPoint = new TestJoinPoint.Builder(this.getClass(), "toString") 17 | .withReturnType(this.getClass()).build(); 18 | final TestProceedingJoinPoint proceedingJoinPoint = new TestProceedingJoinPoint(joinPoint); 19 | 20 | assertThat(LogObservable.methodAnnotatedWithRxLogObservable(proceedingJoinPoint)).isFalse(); 21 | } 22 | } -------------------------------------------------------------------------------- /frodo-runtime/src/main/java/com/fernandocejas/frodo/internal/StopWatch.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.internal; 2 | 3 | import java.util.concurrent.TimeUnit; 4 | 5 | /** 6 | * Class representing a StopWatch for measuring time. 7 | */ 8 | public class StopWatch { 9 | private long startTime; 10 | private long endTime; 11 | private long elapsedTime; 12 | 13 | public StopWatch() { 14 | //empty 15 | } 16 | 17 | public void reset() { 18 | startTime = 0; 19 | endTime = 0; 20 | elapsedTime = 0; 21 | } 22 | 23 | public void start() { 24 | reset(); 25 | startTime = System.nanoTime(); 26 | } 27 | 28 | public void stop() { 29 | if (startTime != 0) { 30 | endTime = System.nanoTime(); 31 | elapsedTime = endTime - startTime; 32 | } else { 33 | reset(); 34 | } 35 | } 36 | 37 | public long getTotalTimeMillis() { 38 | return (elapsedTime != 0) ? TimeUnit.NANOSECONDS.toMillis(endTime - startTime) : 0; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /frodo-runtime/src/main/java/com/fernandocejas/frodo/internal/observable/LoggableObservable.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.internal.observable; 2 | 3 | import com.fernandocejas.frodo.core.annotations.VisibleForTesting; 4 | import com.fernandocejas.frodo.internal.MessageManager; 5 | import com.fernandocejas.frodo.joinpoint.FrodoProceedingJoinPoint; 6 | 7 | abstract class LoggableObservable { 8 | 9 | final FrodoProceedingJoinPoint joinPoint; 10 | final MessageManager messageManager; 11 | final ObservableInfo observableInfo; 12 | 13 | LoggableObservable(FrodoProceedingJoinPoint joinPoint, MessageManager messageManager, 14 | ObservableInfo observableInfo) { 15 | this.joinPoint = joinPoint; 16 | this.messageManager = messageManager; 17 | this.observableInfo = new ObservableInfo(joinPoint); 18 | } 19 | 20 | abstract rx.Observable get(T type) throws Throwable; 21 | 22 | @VisibleForTesting ObservableInfo getInfo() { 23 | return observableInfo; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /frodo-runtime/src/test/java/com/fernandocejas/frodo/internal/StopWatchTest.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.frodo.internal; 2 | 3 | import org.junit.Before; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | import org.mockito.runners.MockitoJUnitRunner; 7 | import rx.Observable; 8 | import rx.observers.TestSubscriber; 9 | 10 | import static org.assertj.core.api.Assertions.assertThat; 11 | 12 | @RunWith(MockitoJUnitRunner.class) 13 | public class StopWatchTest { 14 | 15 | private StopWatch stopWatch; 16 | 17 | @Before 18 | public void setUp() { 19 | stopWatch = new StopWatch(); 20 | } 21 | 22 | @Test 23 | public void mustResetStopWatch() { 24 | stopWatch.reset(); 25 | 26 | assertThat(stopWatch.getTotalTimeMillis()).isZero(); 27 | } 28 | 29 | @Test 30 | public void mustStartStopWatch() throws InterruptedException { 31 | stopWatch.start(); 32 | Thread.sleep(10); 33 | stopWatch.stop(); 34 | 35 | assertThat(stopWatch.getTotalTimeMillis()).isGreaterThan(0L); 36 | } 37 | } -------------------------------------------------------------------------------- /frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.fernandocejas.example.frodo; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | import android.widget.Button; 8 | 9 | public class MainActivity extends Activity { 10 | 11 | private final View.OnClickListener loadExamplesClickListener = new View.OnClickListener() { 12 | @Override 13 | public void onClick(View v) { 14 | Intent intent = new Intent(MainActivity.this, SamplesActivity.class); 15 | startActivity(intent); 16 | } 17 | }; 18 | private Button btnLoadExamples; 19 | 20 | @Override 21 | protected void onCreate(Bundle savedInstanceState) { 22 | super.onCreate(savedInstanceState); 23 | setContentView(R.layout.activity_main); 24 | this.mapGUI(); 25 | } 26 | 27 | private void mapGUI() { 28 | btnLoadExamples = (Button) findViewById(R.id.btnLoadExamples); 29 | btnLoadExamples.setOnClickListener(loadExamplesClickListener); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /frodo-plugin/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | maven { 4 | url "http://dl.bintray.com/android10/maven" 5 | } 6 | } 7 | } 8 | 9 | repositories { 10 | maven { 11 | url "http://dl.bintray.com/android10/maven" 12 | } 13 | } 14 | 15 | apply plugin: 'groovy' 16 | 17 | //noinspection GroovyUnusedAssignment 18 | targetCompatibility = JavaVersion.VERSION_1_7 19 | //noinspection GroovyUnusedAssignment 20 | sourceCompatibility = JavaVersion.VERSION_1_7 21 | 22 | dependencies { 23 | compile gradleApi() 24 | compile localGroovy() 25 | 26 | compile "com.android.tools.build:gradle:${project.androidBuildToolsVersion}" 27 | compile "org.aspectj:aspectjtools:${project.aspectjVersion}" 28 | compile "org.aspectj:aspectjrt:${project.aspectjVersion}" 29 | 30 | testCompile "junit:junit:${project.junitVersion}" 31 | } 32 | 33 | groovydoc { 34 | includePrivate = false 35 | } 36 | 37 | //noinspection GroovyAssignabilityCheck 38 | task javadocJar(type: Jar, dependsOn: ['groovydoc']) { 39 | classifier = 'javadoc' 40 | from 'build/docs/groovydoc' 41 | } 42 | -------------------------------------------------------------------------------- /frodo-android-sample/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 13 | 14 | 20 | 21 | 27 | 28 |