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

    @Override
    public void loadSentences(boolean firstLoad) {
        if (firstLoad) {
            mLoadSentenceCallback = new LoadSentencesUC.LoadSentencesCallback() {
                @Override
                public void onSentencesGet(List<? extends Sentence> sentences) {
                    if (mView != null) {
                        if ((sentences == null || sentences.isEmpty())
                                && getViewModel().getCurrentSentenseId() >= 0 && getViewModel().isFavoriteList()) {
                            // the sentence may change to unstar. avoid showing nothing
                            // try to load the sentences
                            loadCurrentSentense(new LoadSentenceUC.LoadSentenceCallback() {
                                @Override
                                public void onSentenceGot(Sentence sentence) {
                                    List<Sentence> sentences1 = new ArrayList<Sentence>();
                                    if (sentence != null) {
                                        sentences1.add(sentence);
                                    }
                                    showSentenceList(sentences1);
                                }
                            });
                        } else {
                            showSentenceList(sentences);
                        }
                    }
                }
            };
        }
        mLoadSentencesUC.requestParams(new LoadSentencesUC.LoadSentencesRequestParms(firstLoad, getViewModel().isFavoriteList()))
                .callback(mLoadSentenceCallback)
                .execute(mLoadSentencesUseCaseHandler);
    }

    public  SentenceDetailPresenter(SentenceDataRepository sentenceDataRepository, AudioPlayer audioPlayer);

}