From b137055be30c120d9e6ffed07d3c6810ae559553 Mon Sep 17 00:00:00 2001 From: Elliot Wolk Date: Sun, 24 Jul 2022 20:24:52 -0400 Subject: [PATCH 1/2] tts: add setCurrentUtterance() to control service --- android/src/org/coolreader/tts/TTSControlBinder.java | 4 ++++ android/src/org/coolreader/tts/TTSControlService.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/android/src/org/coolreader/tts/TTSControlBinder.java b/android/src/org/coolreader/tts/TTSControlBinder.java index ba9c8e991..561bcb0fa 100644 --- a/android/src/org/coolreader/tts/TTSControlBinder.java +++ b/android/src/org/coolreader/tts/TTSControlBinder.java @@ -54,6 +54,10 @@ public void say(String utterance, TTSControlService.BooleanResultCallback callba mService.say(utterance, callback, new Handler()); } + public void setCurrentUtterance(String utterance) { + mService.setCurrentUtterance(utterance); + } + public void pause(TTSControlService.BooleanResultCallback callback) { mService.pause(callback, new Handler()); } diff --git a/android/src/org/coolreader/tts/TTSControlService.java b/android/src/org/coolreader/tts/TTSControlService.java index e76be3fc1..a2df590ce 100644 --- a/android/src/org/coolreader/tts/TTSControlService.java +++ b/android/src/org/coolreader/tts/TTSControlService.java @@ -1095,6 +1095,10 @@ public void work() { }); } + public void setCurrentUtterance(String utterance) { + mCurrentUtterance = utterance; + } + public void pause(BooleanResultCallback callback, Handler handler) { execTask(new Task("pause") { @Override From 8a8d0aab99333ab562f95191dfa0996c7089f788 Mon Sep 17 00:00:00 2001 From: Elliot Wolk Date: Sun, 24 Jul 2022 20:26:31 -0400 Subject: [PATCH 2/2] tts: fix bug where prev/next while paused keeps old utterance in buffer --- .../coolreader/crengine/TTSToolbarDlg.java | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/android/src/org/coolreader/crengine/TTSToolbarDlg.java b/android/src/org/coolreader/crengine/TTSToolbarDlg.java index 2f22c5b9e..1e9d9d3e0 100644 --- a/android/src/org/coolreader/crengine/TTSToolbarDlg.java +++ b/android/src/org/coolreader/crengine/TTSToolbarDlg.java @@ -384,38 +384,39 @@ public void onCurrentSentenceRequested(TTSControlBinder ttsbinder) { @Override public void onNextSentenceRequested(TTSControlBinder ttsbinder) { - if (isSpeaking) { - moveSelection(ReaderCommand.DCMD_SELECT_NEXT_SENTENCE, new ReaderView.MoveSelectionCallback() { - @Override - public void onNewSelection(Selection selection) { + moveSelection(ReaderCommand.DCMD_SELECT_NEXT_SENTENCE, new ReaderView.MoveSelectionCallback() { + @Override + public void onNewSelection(Selection selection) { + boolean wasSpeaking = isSpeaking; + if (isSpeaking) { ttsbinder.say(preprocessUtterance(selection.text), null); + } else { + ttsbinder.setCurrentUtterance(preprocessUtterance(selection.text)); } + } - @Override - public void onFail() { - } - }); - } else { - moveSelection(ReaderCommand.DCMD_SELECT_NEXT_SENTENCE, null); - } + @Override + public void onFail() { + } + }); } @Override public void onPreviousSentenceRequested(TTSControlBinder ttsbinder) { - if (isSpeaking) { - moveSelection(ReaderCommand.DCMD_SELECT_PREV_SENTENCE, new ReaderView.MoveSelectionCallback() { - @Override - public void onNewSelection(Selection selection) { + moveSelection(ReaderCommand.DCMD_SELECT_PREV_SENTENCE, new ReaderView.MoveSelectionCallback() { + @Override + public void onNewSelection(Selection selection) { + if (isSpeaking) { ttsbinder.say(preprocessUtterance(selection.text), null); + } else { + ttsbinder.setCurrentUtterance(preprocessUtterance(selection.text)); } + } - @Override - public void onFail() { - } - }); - } else { - moveSelection(ReaderCommand.DCMD_SELECT_PREV_SENTENCE, null); - } + @Override + public void onFail() { + } + }); } @Override