Skip to content

Instantly share code, notes, and snippets.

@SabagRonen
Created October 6, 2018 13:38
Show Gist options
  • Save SabagRonen/5328beebaf5ad61ee7af175312421549 to your computer and use it in GitHub Desktop.
Save SabagRonen/5328beebaf5ad61ee7af175312421549 to your computer and use it in GitHub Desktop.
Why Should You Wrap LiveData With Your Own Abstraction
interface MyGeneralObserver<T> {
void notifyUpdate(T value);
}
interface ObservableViewState {
void observeTitle(LifecycleOwner lifecycleOwner, MyGeneralObserver<String> observer);
}
interface IScreenPresenter extends ObservableViewState {
void loadData();
}
class ScreenPresentationState implements ObservableViewState {
private MutableLiveData<String> titleLiveData = new MutableLiveData<>();
@Override
public void observeTitle(LifecycleOwner lifecycleOwner, final MyGeneralObserver<String> observer) {
titleLiveData.observe(lifecycleOwner, new Observer<String>() {
@Override
public void onChanged(String s) {
if (s != null) {
observer.notifyUpdate(s);
}
}
});
}
public void updateTitle(String title) {
titleLiveData.postValue(title);
}
}
class ScreenPresenter implements IScreenPresenter {
private final ScreenPresentationState mState;
public ScreenPresenter(ScreenPresentationState state) {
mState = state;
}
@Override
public void observeTitle(LifecycleOwner lifecycleOwner, MyGeneralObserver<String> observer) {
mState.observeTitle(lifecycleOwner, observer);
}
@Override
public void loadData() {
mState.updateTitle(getSomeHowTheTitle());
}
private String getSomeHowTheTitle() {
return "this is just example";
}
}
class ScreenView extends AppCompatActivity {
@Inject IScreenPresenter mPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPresenter.observeTitle(this, new MyGeneralObserver<String>() {
@Override
public void notifyUpdate(String value) {
// render somehow the title
}
});
mPresenter.loadData();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment