The Indefinite Observable for Android repo.
Learn more about the APIs defined in the library by reading our technical documentation and our Starmap.
Add the Jitpack repository to your project's build.gradle
:
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
Depend on the latest version of the library. Take care to occasionally check for updates.
dependencies {
compile 'com.github.material-motion:indefinite-observable-android:2.0.0'
}
For more information regarding versioning, see:
You can have a copy of this library with local changes and test it in tandem
with its client project. To add a local dependency on this library, add this
library's identifier to your project's local.dependencies
:
com.github.material-motion:indefinite-observable-android
Because
local.dependencies
is never to be checked into Version Control Systems, you must also ensure that any local dependencies are also defined inbuild.gradle
as explained in the previous section.
Important
For each local dependency listed, you must run gradle install
from its
project root every time you make a change to it. That command will publish your
latest changes to the local maven repository. If your local dependencies have
local dependencies of their own, you must gradle install
them as well.
You must gradle clean
your project every time you add or remove a local
dependency.
How to use the library in your project.
Open Android Studio,
choose File > New > Import
,
choose the root build.gradle
file.
To build the sample application, run the following commands:
git clone https://github.com/material-motion/indefinite-observable-android.git
cd indefinite-observable-android
gradle installDebug
To run all unit tests, run the following commands:
git clone https://github.com/material-motion/indefinite-observable-android.git
cd indefinite-observable-android
gradle test
- How to create a synchronous stream
- How to create an asynchronous stream using callbacks
- How to subscribe to a stream
- How to unsubscribe from a stream
- How to create an synchronous stream using objects
- How to make a custom observable
IndefiniteObservable<Observer<Integer>> observable = new IndefiniteObservable<>(
new Connector<Observer<Integer>>() {
@Nullable
@Override
public Disconnector connect(Observer<Integer> observer) {
observer.next(5);
return null;
}
});
}
If you have an API that provides a callback-based mechanism for registering listeners then you can create an asynchronous stream like so:
IndefiniteObservable<Observer<Integer>> observable = new IndefiniteObservable<>(
new Connector<Observer<Integer>>() {
public Disconnector connect(Observer<Integer> observer) {
final SomeToken token = registerSomeCallback(new SomeCallback() {
public void onCallbackValue(Integer value) {
observer.next(value);
}
});
return new Disconnector() {
public void disconnect() {
unregisterSomeCallback(token);
}
};
}
});
Subscription subscription = observable.subscribe(new Observer<Integer>() {
public void next(Integer value) {
Log.d(TAG, "Received value: " + value);
}
});
subscription.unsubscribe();
To create an observable that supports custom channels, extend Observer and IndefiniteObservable.
public abstract class CustomObserver<T> extends Observer<T> {
public abstract void next(T value);
public abstract void customChannel(Foobar value);
}
public class CustomObservable<T> extends IndefiniteObservable<CustomObserver<T>> {
public CustomObservable(Connector<CustomObserver<T>> connector) {
super(connector);
}
}
We welcome contributions!
Check out our upcoming milestones.
Learn more about our team, our community, and our contributor essentials.
Licensed under the Apache 2.0 license. See LICENSE for details.