package com.github.captain_miao.agera.tutorial;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.annotation.NonNull;
import com.github.captain_miao.agera.tutorial.base.BaseActivity;
import com.github.captain_miao.agera.tutorial.databinding.ActivityAgeraReservoirBinding;
import com.google.android.agera.Repositories;
import com.google.android.agera.Repository;
import com.google.android.agera.Reservoir;
import com.google.android.agera.Reservoirs;
import com.google.android.agera.Result;
import com.google.android.agera.Supplier;
import com.google.android.agera.Updatable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SimpleActivityH extends BaseActivity implements Updatable {
private ActivityAgeraReservoirBinding mBinding;
@Override
public void init(Bundle savedInstanceState) {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_agera_reservoir);
setUpRepository();
mBinding.setObservable(mReservoir);
}
//for agera
private ExecutorService mExecutor;
private Reservoir<Integer> mReservoir;
private Repository<Result<Integer>> mRepository;
private int mCount = 0;
@Override
protected void onResume() {
super.onResume();
mRepository.addUpdatable(this);
}
@Override
protected void onPause() {
super.onPause();
mRepository.removeUpdatable(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
mExecutor.shutdown();
}
private void setUpRepository() {
mExecutor = Executors.newSingleThreadExecutor();
mReservoir = Reservoirs.reservoir();
Supplier<Result<Integer>> supplier = new Supplier<Result<Integer>>() {
@NonNull
@Override
public Result<Integer> get() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mReservoir.get();// consume receiver
return Result.success(++mCount);
}
};
mRepository = Repositories.repositoryWithInitialValue(Result.<Integer>absent())
.observe(mReservoir)
.onUpdatesPerLoop()
.goTo(mExecutor)
.thenGetFrom(supplier)
.compile();
}
@Override
public void update() {
if(mRepository.get().succeeded()) {
mBinding.setValue(mRepository.get().get());
}
}
}