Skip to content

Instantly share code, notes, and snippets.

View murki's full-sized avatar

Miguel Juárez López murki

View GitHub Profile
public Observable<SensorEvent> naiveObserveSensorChanged(final SensorManager sensorManager, final Sensor sensor, final int samplingPreiodUs) {
return Observable.create(new Observable.OnSubscribe<SensorEvent>() {
@Override
public void call(final Subscriber<? super SensorEvent> subscriber) {
final SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// (3) - checking for subscribers before emitting values
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(event);
@murki
murki / fromAsync-6.java
Last active February 9, 2017 12:58
Wrapping an asynchronous API that uses listeners, by using RxJava Observable.fromAsync
public Observable<SensorEvent> observeSensorChanged(final SensorManager sensorManager, final Sensor sensor, final int samplingPeriodUs) {
return Observable.fromAsync(new Action1<AsyncEmitter<SensorEvent>>() {
@Override
public void call(final AsyncEmitter<SensorEvent> sensorEventAsyncEmitter) {
final SensorEventListener sensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
sensorEventAsyncEmitter.onNext(sensorEvent);
}
// DomainService.java
@RxLogObservable
public Observable<Data> getMergedData() {
return Observable.mergeDelayError( // <-- don't interrupt stream
diskRepository.getData().subscribeOn(Schedulers.io()),
networkRepository.getData()
.doOnNext(new Action1<Data>() {
@Override
public void call(Data data) {
diskRepository.saveData(data);
// NetworkRepository.java
@RxLogObservable
public Observable<Data> getData() {
// implementation
}
// DiskRepository.java
@RxLogObservable
public Observable<Timestamped<Data>> getData() {
// implementation
// IDisplayedData implementation (e.g. a Fragment)
private Subscription dataSubscription;
public void refreshData() {
// Last parameter means delayError = true
Observable<Timestamped<Data>> dataObservable = domainService.getData(this).observeOn(AndroidSchedulers.mainThread(), true);
dataSubscription = dataObservable.subscribe(dataOnNext, dataOnError, dataOnComplete);
}
@Override
@murki
murki / PlacesActivity.kt
Last active June 10, 2021 03:59
The poor man's Dagger: Exemplifying how to implement dependency injection on Android by (ab)using ApplicationContext's getSystemService(). Here we attain inversion of control without the need of any external library. We also use Kotlin's extension methods to provide a friendlier, strongly-typed API to locate dependencies.
class PlacesActivity : AppCompatActivity() {
private lateinit var placesPresenter: PlacesPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// This is how you instantiate your Presenter while the service locator resolves all of its dependencies
// Note that the explicit type argument <PlacesPresenter> is not even necessary since Kotlin can infer the type
placesPresenter = application.getSystemService<PlacesPresenter>()
}
}
{
"name": "murki X NFT",
"symbol": "MRK",
"description": "murki.eth avatar NFT",
"seller_fee_basis_points": 1000,
"image": "https://avatars.githubusercontent.com/u/216735",
"external_url": "https://twitter.com/murki_eth",
"attributes": [
{
"trait_type": "Background",