Skip to content

Instantly share code, notes, and snippets.

View Laimiux's full-sized avatar

Laimonas Turauskas Laimiux

View GitHub Profile
@Laimiux
Laimiux / ViewStatePagerAdapter.java
Created January 9, 2015 23:03
PagerAdapter for views instead of Fragments.
package com.laimiux.dayahead.ui.util;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
@Laimiux
Laimiux / commonrx.java
Last active April 23, 2017 11:04
Common rx data loading
public void onAttach(View view) {
view.showLoading(true)
repository.getData().subscribe({ data ->
view.showLoading(false)
view.showData(data)
}, { error ->
view.showLoading(false)
// should we have a retry action?
view.showError("boo!")
})
public void onAttach(View view) {
repository.getLatestDataStream().subscribe({ data ->
view.showData(data)
})
}
// Lce -> Loading / Content / Error
class Lce<T> {
public static <T> Lce<T> data(T data) {
// implementation
}
public static <T> Lce<T> error(Throwable error) {
// implementation
}
public static <T> Lce<T> loading() {
// implementation
interface DataRepository {
Observable<Lce<Data>> getDataEventStream();
}
public void onAttach(View view) {
// Remember to clean the subscription!
repository.getDataEventStream().subscribe({ event ->
if (event.isLoading) {
view.showLoading(true)
} else if (event.hasError()) {
view.showError(event.getError())
} else {
view.showData(event.getData())
}
Observable<Lce<Data>> getDataEventStream() {
return api.getData()
.map(data -> Lce.data(data))
.startWith(Lce.loading())
.onErrorReturn(e -> Lce.error(e))
}
final PublishRelay<String> refreshRelay = PublishRelay.create()
void refreshData() {
refreshRelay.call("refresh event")
}
Observable<Lce<Data>> getDataEventStream() {
return refreshRelay
.startWith("initial")
.switchMap { event ->
class UserContent {
// requires both the user and list of published content
}
Observable<Lce<User>> getUserEventStream(String userId);
Observable<Lce<List<Content>> getContentEventStream(String userId);
Observable<Lce<UserContent>> getProfileEventStream(String id) {
return Observable.combineLatest(
getUserEventStream(id),
class UserManager {
Observable<Lce<User>> getUserEventStream() {
return updateEventStream().startWith(cachedBundle().map(toLce()))
}
}