class SentenceDetailPresenter extends AbstractMvpPresenter<SentenceDetail.View, SentenceDetailViewModel> implements SentenceDetail.Presenter<SentenceDetail.View, SentenceDetailViewModel> {

    @Subscribe(threadMode = ThreadMode.MAIN)
    @Override
    public void onFetchingAudioEvent(FetchingAudioEvent fetchingAudioEvent) {
        if (mView == null) {
            return;
        }
        if (fetchingAudioEvent.getFechingResult() == FetchingEvent.RESULT.REFRESHING) {
            mView.showFetchingResult(R.string.loading);
            return;
        }
        FetchingAudioEvent stickyEvent = getEventBus().getStickyEvent(FetchingAudioEvent.class);
        if (stickyEvent != null) {
            if (getViewModel().getCurrentAudioUrl() == null || !getViewModel().getCurrentAudioUrl().equals(stickyEvent.getAudioUrl())
                    || getViewModel().getPlayToken() != stickyEvent.getToken()) {
                // not current sentence's state
                // clear the result, set to any other status
                stickyEvent.setFechingResult(FetchingEvent.RESULT.EXISTED);
                return;
            }

            switch (stickyEvent.getFechingResult()) {
                case FAIL:
                    mView.showFetchingResult(R.string.download_fail);
                    getViewModel().setAudioStatus(SentenceDetailViewModel.AUDIO_STATUS.DOWNLOADING_FAIL);
                    break;
                case SUCCESS:
                    getViewModel().setAudioStatus(SentenceDetailViewModel.AUDIO_STATUS.PLAYING);
                    break;
                case NONE:
                    // mean start to download
                    getViewModel().setAudioStatus(SentenceDetailViewModel.AUDIO_STATUS.DOWNLOADING);
                    break;
            }
            // clear the result, set to any other status
            stickyEvent.setFechingResult(FetchingEvent.RESULT.EXISTED);
            updateAudioFabStatusAndPlayIfNeed();
        }
    }

    public  SentenceDetailPresenter(SentenceDataRepository sentenceDataRepository, AudioPlayer audioPlayer);

}