use of com.ichi2.anki.DeckPicker.REFRESH_VOICE_INFO in project AnkiChinaAndroid by ankichinateam.
the class AbstractFlashcardViewer method readCardText.
private void readCardText(final Card card, final SoundSide cardSide) {
final String cardSideContent;
if (!cardContentIsEmpty() && ((sDisplayAnswer && mFinalLoadAnswer.isEmpty()) || (!sDisplayAnswer && mFinalLoadQuestion.isEmpty()))) {
mainHandler.postDelayed(() -> {
showProgressBar();
Toast.makeText(AbstractFlashcardViewer.this, "卡牌加载中,网络不佳", Toast.LENGTH_SHORT).show();
}, 3000);
nNeedSpeakFinalRenderContent = true;
if (!fetchingRenderContent) {
fetchWebViewRenderContent(mCardWebView);
}
return;
}
mainHandler.removeCallbacksAndMessages(null);
hideProgressBar();
// 在这里获取最后的内容
cardSideContent = cardSide == SoundSide.QUESTION ? mFinalLoadQuestion : mFinalLoadAnswer;
Timber.i("finally i wanna say:%s,showing answer:%s", cardSideContent, sDisplayAnswer);
// 如果不是设置了离线模式且当前没网时,且非强制离线模式,则默认使用在线模式
if (AnkiDroidApp.getSharedPrefs(this).getBoolean(KEY_SELECT_ONLINE_SPEAK_ENGINE, false) && !mOfflineSpeakingForOnce) {
// 使用在线语音引擎
File target = new File(FileUtil.createTmpDir(this), card.getId() + "-" + cardSide + ".wav");
Timber.i("target audio :%s", target.getAbsolutePath());
if (target.exists()) {
Timber.i("target audio is exists,play it now");
mSoundPlayer.playSound(target.getAbsolutePath(), mp -> mOnlineSpeaking = false);
mOnlineSpeaking = true;
speakingHandler.postDelayed(speakingRunnable, 300);
return;
}
if (!isNetworkAvailable(AbstractFlashcardViewer.this)) {
CustomStyleDialog customStyleDialog = new CustomStyleDialog.Builder(AbstractFlashcardViewer.this).setCustomLayout(R.layout.dialog_common_custom_next).setTitle("在线朗读需联网!").centerTitle().setMessage("没有网络时可以点下方按钮切换成本地引擎").setPositiveButton("切换本地引擎", (dialog, which) -> {
dialog.dismiss();
AnkiDroidApp.getSharedPrefs(this).edit().putBoolean(KEY_SELECT_ONLINE_SPEAK_ENGINE, false).apply();
}).create();
customStyleDialog.show();
return;
}
getAccount().getToken(this, new MyAccount.TokenCallback() {
@Override
public void onSuccess(String token) {
mCacheToken = token;
// if (mFreeOnlineEngineCount != -10086) {
// if (mFreeOnlineEngineCount > 0) {
// String voice=ReadText.getAzureLanguage(card.getDid(), card.getOrd(), cardSide);
// if (voice.isEmpty()) {
// //选择语言
// CustomStyleDialog d = new CustomStyleDialog.Builder(AbstractFlashcardViewer.this)
// .setCustomLayout(R.layout.dialog_common_custom_next)
// .setTitle("首次朗读,请设置语言")
// .centerTitle()
// .setMessage("设置语言后,朗读效果更优,还可以选择是否自动朗读。")
// .setPositiveButton("前往设置", (dialog, which) -> {
// dialog.dismiss();
// SpeakSettingActivity.OpenSpeakSetting(card.getId(), card.getDid(), AbstractFlashcardViewer.this);
// }) .create();
// d.show();
// return;
// }
List<Pair<String, String>> texts = splitAry(cardSideContent, 59, String.valueOf(card.getId()), cardSide);
Map<String, String> params = new HashMap<>();
params.put(SpeechSynthesizer.PARAM_SPEED, String.valueOf(ReadText.getSpeechRate(mCurrentCard.getDid(), mCurrentCard.getOrd()) * 5));
synthesizer.setParams(params);
int result = synthesizer.batchSpeak(texts);
checkResult(result, "speak");
//
// } else {
// CustomStyleDialog customStyleDialog = new CustomStyleDialog.Builder(AbstractFlashcardViewer.this)
// .setCustomLayout(R.layout.dialog_common_custom_next)
// .setTitle("在线朗读次数已用完")
// .centerTitle()
// .setMessage("请前往充值在线朗读次数,学霸用户可以切换离线引擎,不限朗读次数")
// .setPositiveButton("前往充值", (dialog, which) -> {
// dialog.dismiss();
// WebViewActivity.openUrlInApp(AbstractFlashcardViewer.this, String.format(mBuyOnlineEngineUrl, token, BuildConfig.VERSION_NAME), token, REFRESH_VOICE_INFO);
// }).setNegativeButton("使用离线引擎", (dialog, which) -> {
// dialog.dismiss();
// AnkiDroidApp.getSharedPrefs(AbstractFlashcardViewer.this).edit().putBoolean(KEY_SELECT_ONLINE_SPEAK_ENGINE, false).apply();
// })
//
// .create();
//
// customStyleDialog.show();
// }
// } else {
// updateOnlineVoiceInfo(token);
// }
}
@Override
public void onFail(String message) {
Timber.e("need login while using online speak engine ");
Toast.makeText(AbstractFlashcardViewer.this, "当前未使用Anki记忆卡账号登录,无法使用在线语音引擎", Toast.LENGTH_SHORT).show();
Intent myAccount = new Intent(AbstractFlashcardViewer.this, MyAccount.class);
myAccount.putExtra("notLoggedIn", true);
startActivityForResultWithAnimation(myAccount, REFRESH_VOICE_INFO, ActivityTransitionAnimation.FADE);
}
});
speakingHandler.postDelayed(speakingRunnable, 300);
return;
}
mOfflineSpeakingForOnce = false;
String clozeReplacement = this.getString(R.string.reviewer_tts_cloze_spoken_replacement);
ReadText.readCardSide(cardSide, cardSideContent, card.getId(), getDeckIdForCard(card), card.getOrd(), clozeReplacement, true);
speakingHandler.postDelayed(speakingRunnable, 300);
}
use of com.ichi2.anki.DeckPicker.REFRESH_VOICE_INFO in project AnkiChinaAndroid by ankichinateam.
the class AbstractFlashcardViewer method onActivityResult.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Timber.i("onActivityResult:" + requestCode);
if (requestCode == BE_VIP || requestCode == REFRESH_LOGIN_STATE_AND_TURN_TO_VIP_HTML) {
mRefreshVipStateOnResume = true;
mTurnToVipHtml = requestCode == REFRESH_LOGIN_STATE_AND_TURN_TO_VIP_HTML;
} else if (requestCode == REFRESH_VOICE_INFO) {
mRefreshVoiceInfoStateOnResume = true;
} else if (resultCode == DeckPicker.RESULT_DB_ERROR) {
closeReviewer(DeckPicker.RESULT_DB_ERROR, false);
} else if (resultCode == DeckPicker.RESULT_MEDIA_EJECTED) {
finishNoStorageAvailable();
} else if (requestCode == REFRESH_TOP_BUTTONS) {
restorePreferences();
supportInvalidateOptionsMenu();
invalidateOptionsMenu();
} else if (requestCode == REQUEST_CODE_SPEAK_SETTING) {
restorePreferences();
mReInitBDVoice = true;
} else if (requestCode == REFRESH_GESTURE) {
restorePreferences();
} else if (requestCode == REFRESH_CONTROLLER) {
restorePreferences();
}
/* Reset the schedule and reload the latest card off the top of the stack if required.
The card could have been rescheduled, the deck could have changed, or a change of
note type could have lead to the card being deleted */
if (data != null && data.hasExtra("reloadRequired")) {
performReload();
}
if (requestCode == EDIT_CURRENT_CARD) {
if (resultCode == RESULT_OK) {
// content of note was changed so update the note and current card
Timber.i("AbstractFlashcardViewer:: Saving card...");
CollectionTask.launchCollectionTask(UPDATE_NOTE, mUpdateCardHandler, new TaskData(sEditorCard, true));
onEditedNoteChanged();
} else if (resultCode == RESULT_CANCELED && !(data != null && data.hasExtra("reloadRequired"))) {
// nothing was changed by the note editor so just redraw the card
redrawCard();
}
} else if (requestCode == DECK_OPTIONS && resultCode == RESULT_OK) {
performReload();
}
if (!mDisableClipboard) {
clipboardSetText("");
}
}
Aggregations