├── lib ├── .gitignore ├── gradle.properties ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── org │ │ │ └── js │ │ │ └── cycle │ │ │ └── android │ │ │ ├── ComponentProperties.java │ │ │ ├── Component.java │ │ │ ├── Driver.java │ │ │ ├── Source.java │ │ │ ├── HttpDriver.java │ │ │ ├── Sink.java │ │ │ ├── ObservableOnValueChangeListener.java │ │ │ ├── DomSink.java │ │ │ ├── ObservableSingleTapGestureDetector.java │ │ │ ├── HttpSource.java │ │ │ ├── Sinks.java │ │ │ ├── HttpSink.java │ │ │ ├── PropsSource.java │ │ │ ├── Event.java │ │ │ ├── DomSelection.java │ │ │ ├── Sources.java │ │ │ ├── ObservableTextWatcher.java │ │ │ ├── DomSource.java │ │ │ ├── ClickEventInterceptingLayout.java │ │ │ ├── Cycle.java │ │ │ ├── Util.java │ │ │ └── DomDriver.java │ └── test │ │ └── java │ │ └── org │ │ └── js │ │ └── cycle │ │ └── android │ │ ├── ObservableTextWatcherTest.java │ │ ├── UtilTest.java │ │ ├── DomSourceTest.java │ │ └── CycleTest.java ├── proguard-rules.pro ├── build.gradle └── gradle-maven-push.gradle ├── sample ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── 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 │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ ├── dimens.xml │ │ │ └── styles.xml │ │ ├── values-v21 │ │ │ └── styles.xml │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ ├── layout │ │ │ ├── activity_sample.xml │ │ │ ├── layout_labeled_slider.xml │ │ │ ├── vtree_helloworld.xml │ │ │ ├── vtree_counter.xml │ │ │ ├── vtree_search_github.xml │ │ │ ├── activity_bmi.xml │ │ │ ├── drawer_header.xml │ │ │ └── content_sample.xml │ │ └── menu │ │ │ └── drawer.xml │ │ ├── java │ │ └── org │ │ │ └── js │ │ │ └── cycle │ │ │ └── android │ │ │ └── sample │ │ │ ├── GithubService.java │ │ │ ├── SearchResponse.java │ │ │ ├── SampleApplication.java │ │ │ ├── HelloWorldActivity.java │ │ │ ├── LabeledSlider.java │ │ │ ├── CounterActivity.java │ │ │ ├── BmiComponent.java │ │ │ ├── GithubSearchActivity.java │ │ │ ├── BmiActivity.java │ │ │ └── SampleActivity.java │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── CHANGELOG.md ├── .gitignore ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .buildscript └── deploy_snapshot.sh ├── gradle.properties ├── .travis.yml ├── gradlew.bat ├── README.md └── gradlew /lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /sample/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':sample', ':lib' 2 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 0.2.0 (06/21/2016) 2 | 3 | * Initial release 4 | 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | .idea 5 | .DS_Store 6 | /build 7 | /captures -------------------------------------------------------------------------------- /lib/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_NAME=Cycle.js port for Android 2 | POM_ARTIFACT_ID=cycle-android 3 | POM_PACKAGING=jar -------------------------------------------------------------------------------- /lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyclejs-community/cycle-android/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/ComponentProperties.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | public interface ComponentProperties { 4 | } 5 | -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyclejs-community/cycle-android/HEAD/sample/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyclejs-community/cycle-android/HEAD/sample/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyclejs-community/cycle-android/HEAD/sample/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/Component.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | public interface Component { 4 | Sinks create(Sources sources); 5 | } 6 | -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyclejs-community/cycle-android/HEAD/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyclejs-community/cycle-android/HEAD/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/Driver.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | import rx.Observable; 4 | 5 | public interface Driver { 6 | void apply(Observable stream); 7 | } 8 | -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/Source.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | import rx.Observable; 4 | 5 | public interface Source { 6 | String name(); 7 | void apply(Observable stream); 8 | } 9 | -------------------------------------------------------------------------------- /sample/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Aug 29 23:56:17 PDT 2016 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.14.1-all.zip 7 | -------------------------------------------------------------------------------- /sample/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | CycleAndroid 3 | Settings 4 | Open 5 | Close 6 | 7 | -------------------------------------------------------------------------------- /sample/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /sample/src/main/java/org/js/cycle/android/sample/GithubService.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android.sample; 2 | 3 | import retrofit2.Response; 4 | import retrofit2.http.GET; 5 | import retrofit2.http.Query; 6 | import rx.Observable; 7 | 8 | interface GithubService { 9 | @GET("search/repositories") Observable> search(@Query("q") String query); 10 | } 11 | -------------------------------------------------------------------------------- /sample/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /sample/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /sample/src/main/java/org/js/cycle/android/sample/SearchResponse.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android.sample; 2 | 3 | import java.util.Collections; 4 | import java.util.List; 5 | 6 | public class SearchResponse { 7 | int total_count; 8 | boolean incomplete_results; 9 | List items = Collections.emptyList(); 10 | 11 | static class SearchResponseItem { 12 | long id; 13 | String name; 14 | String full_name; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /sample/src/main/res/layout/activity_sample.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/HttpDriver.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | import rx.Observable; 4 | 5 | @SuppressWarnings("rawtypes") 6 | public final class HttpDriver implements Driver { 7 | private Observable sink; 8 | 9 | private HttpDriver() { 10 | } 11 | 12 | public static HttpDriver makeHttpDriver() { 13 | return new HttpDriver(); 14 | } 15 | 16 | @Override public void apply(Observable sink) { 17 | this.sink = sink; 18 | } 19 | 20 | public Observable sink() { 21 | return sink; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/Sink.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | import rx.Observable; 4 | 5 | public interface Sink { 6 | String name(); 7 | Observable stream(); 8 | 9 | class Factory { 10 | public static Sink create(String name, Observable stream) { 11 | return new Sink() { 12 | @Override public String name() { 13 | return name; 14 | } 15 | 16 | @Override public Observable stream() { 17 | return stream; 18 | } 19 | }; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /sample/src/main/res/layout/layout_labeled_slider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 17 | 18 | -------------------------------------------------------------------------------- /sample/src/main/res/menu/drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 15 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/ObservableOnValueChangeListener.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | import android.widget.NumberPicker; 4 | 5 | import rx.Observable; 6 | import rx.subjects.PublishSubject; 7 | 8 | final class ObservableOnValueChangeListener implements NumberPicker.OnValueChangeListener { 9 | private final PublishSubject observable = PublishSubject.create(); 10 | 11 | @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 12 | observable.onNext(new Event("change", picker)); 13 | } 14 | 15 | public Observable observable() { 16 | return observable; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/DomSink.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | import rx.Observable; 4 | import trikita.anvil.Anvil; 5 | 6 | public final class DomSink implements Sink { 7 | private final Observable vtree; 8 | 9 | private DomSink(Observable vtree) { 10 | this.vtree = vtree; 11 | } 12 | 13 | public static DomSink create(Observable vtree) { 14 | return new DomSink(vtree); 15 | } 16 | 17 | @Override public String name() { 18 | return "DOM"; 19 | } 20 | 21 | @Override public Observable stream() { 22 | return vtree; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/ObservableSingleTapGestureDetector.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | import android.view.GestureDetector; 4 | import android.view.MotionEvent; 5 | 6 | import rx.Observable; 7 | import rx.subjects.PublishSubject; 8 | 9 | final class ObservableSingleTapGestureDetector extends GestureDetector.SimpleOnGestureListener { 10 | private final PublishSubject subject = PublishSubject.create(); 11 | 12 | @Override public boolean onSingleTapUp(MotionEvent e) { 13 | subject.onNext(e); 14 | return super.onSingleTapUp(e); 15 | } 16 | 17 | Observable clickStream() { 18 | return subject; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/src/main/java/org/js/cycle/android/HttpSource.java: -------------------------------------------------------------------------------- 1 | package org.js.cycle.android; 2 | 3 | import retrofit2.Response; 4 | import rx.Observable; 5 | 6 | /** TODO */ 7 | public final class HttpSource implements Source { 8 | private final HttpDriver httpDriver; 9 | 10 | public HttpSource(HttpDriver httpDriver) { 11 | this.httpDriver = httpDriver; 12 | } 13 | 14 | public Observable>> observable() { 15 | //noinspection unchecked 16 | return (Observable>>) httpDriver.sink(); 17 | } 18 | 19 | @Override public String name() { 20 | return "HTTP"; 21 | } 22 | 23 | @Override public void apply(Observable source) { 24 | httpDriver.apply(source); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/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/felipe_lima/Library/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 | -------------------------------------------------------------------------------- /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/felipe_lima/Library/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 | -------------------------------------------------------------------------------- /sample/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 |