package starter.kit.rx.app.feature.content;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import butterknife.BindView;
import butterknife.OnClick;
import java.util.concurrent.TimeUnit;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import starter.kit.rx.app.R;
import starter.kit.feature.rx.RxStarterActivity;
import starter.kit.rx.app.views.CustomEmptyView;
import starter.kit.util.ProgressInterface;
import starter.kit.util.RxUtils;
import support.ui.content.ContentPresenter;
import support.ui.content.EmptyView;
import support.ui.content.ErrorView;
import support.ui.content.ReflectionContentPresenterFactory;
import support.ui.content.RequiresContent;
import static rx.android.schedulers.AndroidSchedulers.mainThread;
@RequiresContent(emptyView = CustomEmptyView.class) public class ContentActivity extends RxStarterActivity
implements EmptyView.OnEmptyViewClickListener,
ErrorView.OnErrorViewClickListener,
ProgressInterface {
ReflectionContentPresenterFactory factory =
ReflectionContentPresenterFactory.fromViewClass(getClass());
ContentPresenter contentPresenter;
@BindView(R.id.container) FrameLayout container;
@BindView(R.id.support_ui_content_view) ImageView contentView;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
contentPresenter = factory.createContentPresenter();
contentPresenter.onCreate(this);
contentPresenter.attachContainer(container);
contentPresenter.attachContentView(contentView);
contentPresenter.setOnEmptyViewClickListener(this);
contentPresenter.setOnErrorViewClickListener(this);
}
@Override protected void onDestroy() {
super.onDestroy();
contentPresenter.onDestroy();
}
@SuppressWarnings("unused")
@OnClick({
R.id.btnLoad, R.id.btnEmpty, R.id.btnError, R.id.btnContent,
}) public void onClick(View view) {
switch (view.getId()) {
case R.id.btnLoad:
onRefresh();
break;
case R.id.btnEmpty:
//contentPresenter.buildEmptyImageView(R.drawable.support_ui_empty)
// .buildEmptyTitle(R.string.support_ui_empty_title_placeholder)
// .buildEmptySubtitle(R.string.support_ui_empty_subtitle_placeholder)
// .displayEmptyView();
contentPresenter.displayEmptyView();
break;
case R.id.btnContent:
contentPresenter.displayContentView();
break;
case R.id.btnError:
//contentPresenter.buildErrorImageView(R.drawable.support_ui_error_network)
// .buildErrorTitle(R.string.support_ui_error_title_placeholder)
// .buildErrorSubtitle(R.string.support_ui_error_subtitle_placeholder)
// .displayErrorView();
contentPresenter.displayErrorView();
break;
}
}
@Override public void onEmptyViewClick(View view) {
onRefresh();
}
@Override public void onErrorViewClick(View view) {
onRefresh();
}
private void onRefresh() {
rx.Observable.just(1)
.subscribeOn(Schedulers.io())
.delay(2, TimeUnit.SECONDS)
.compose(RxUtils.progressTransformer(this))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(integer -> {
contentPresenter.displayContentView();
});
}
@Override public void showProgress() {
Observable.empty()
.observeOn(mainThread())
.doOnTerminate(() -> contentPresenter.displayLoadView())
.subscribe();
}
@Override public void hideProgress() {
}
}