class MainPresenter extends AbstractMvpPresenter<Main.View, Void> implements Main.Presenter<Main.View, Void> {

    @Override
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void refreshFetchingStatus(FetchingEvent fetchingEvent) {
        FetchingEvent stickyEvent = getEventBus().getStickyEvent(FetchingEvent.class);
        if (mView != null) {
            boolean needToEnd = stickyEvent == null || !stickyEvent.isFetching();
            boolean needToStart = !needToEnd && stickyEvent.getFechingResult() != FetchingEvent.RESULT.REFRESHING;
            mView.updateManualFetchFabAnimator(needToEnd, needToStart);
            if (stickyEvent != null) {
                switch (stickyEvent.getFechingResult()) {
                    case REFRESHING:
                        mView.showFetchingResult(R.string.refreshing);
                        break;
                    case NO_NETWORK:
                        mView.showFetchingResult(R.string.refresh_no_network);
                        break;
                    case FAIL:
                    case ABORT:
                        mView.showFetchingResult(R.string.refresh_fail);
                        break;
                    case SUCCESS:
                        mView.showFetchingResult(R.string.refresh_finish);
                        break;
                    case GOT_NEW:
                        mView.showFetchingResult(R.string.got_new);
                        break;
                    case EXISTED:
                        mView.showFetchingResult(R.string.already_got);
                        break;
                }
            }
        }
        if (stickyEvent != null) {
            // clear the result
            stickyEvent.setFechingResult(FetchingEvent.RESULT.NONE);
        }
    }

    public  MainPresenter();
    public  MainPresenter(UseCaseHandler useCaseHandler, ManuallyFetchTodaysSentenceUC fetchTodaysSentenceUseCase);

}