diff options
author | Narayan Kamath <narayan@google.com> | 2012-07-20 18:01:43 +0100 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-08-14 08:38:26 -0700 |
commit | 9c3d7a888d0c5c09f0153e81018ff68aa6e91712 (patch) | |
tree | 51e01c1f7c3b28eacdc3770e7135bc3dac4c3ff3 | |
parent | ed4e541a20cc662b8399844684d18ad0060bd1cb (diff) | |
download | frameworks_base-9c3d7a888d0c5c09f0153e81018ff68aa6e91712.zip frameworks_base-9c3d7a888d0c5c09f0153e81018ff68aa6e91712.tar.gz frameworks_base-9c3d7a888d0c5c09f0153e81018ff68aa6e91712.tar.bz2 |
Fixes to TextToSpeechService#synthesizeToFile
- Fixes a strict mode violation, defers file validity checks
to when the engine starts synthesizing audio.
- Fixes some log spam when done() is called twice.
bug:6215680
bug:5415258
Change-Id: I4001be848b5208422d4091b7398e94ed311c649f
-rw-r--r-- | core/java/android/speech/tts/FileSynthesisCallback.java | 27 | ||||
-rw-r--r-- | core/java/android/speech/tts/TextToSpeechService.java | 37 |
2 files changed, 28 insertions, 36 deletions
diff --git a/core/java/android/speech/tts/FileSynthesisCallback.java b/core/java/android/speech/tts/FileSynthesisCallback.java index 04c3377..3e33e8e 100644 --- a/core/java/android/speech/tts/FileSynthesisCallback.java +++ b/core/java/android/speech/tts/FileSynthesisCallback.java @@ -95,6 +95,22 @@ class FileSynthesisCallback extends AbstractSynthesisCallback { } } + /** + * Checks whether a given file exists, and deletes it if it does. + */ + private boolean maybeCleanupExistingFile(File file) { + if (file.exists()) { + Log.v(TAG, "File " + file + " exists, deleting."); + if (!file.delete()) { + Log.e(TAG, "Failed to delete " + file); + return false; + } + } + + return true; + } + + @Override public int getMaxBufferSize() { return MAX_AUDIO_BUFFER_SIZE; @@ -120,6 +136,11 @@ class FileSynthesisCallback extends AbstractSynthesisCallback { cleanUp(); throw new IllegalArgumentException("FileSynthesisRequest.start() called twice"); } + + if (!maybeCleanupExistingFile(mFileName)) { + return TextToSpeech.ERROR; + } + mSampleRateInHz = sampleRateInHz; mAudioFormat = audioFormat; mChannelCount = channelCount; @@ -166,6 +187,12 @@ class FileSynthesisCallback extends AbstractSynthesisCallback { public int done() { if (DBG) Log.d(TAG, "FileSynthesisRequest.done()"); synchronized (mStateLock) { + if (mDone) { + if (DBG) Log.d(TAG, "Duplicate call to done()"); + // This preserves existing behaviour. Earlier, if done was called twice + // we'd return ERROR because mFile == null and we'd add to logspam. + return TextToSpeech.ERROR; + } if (mStopped) { if (DBG) Log.d(TAG, "Request has been aborted."); return TextToSpeech.ERROR; diff --git a/core/java/android/speech/tts/TextToSpeechService.java b/core/java/android/speech/tts/TextToSpeechService.java index 4c1a0af..d124e68 100644 --- a/core/java/android/speech/tts/TextToSpeechService.java +++ b/core/java/android/speech/tts/TextToSpeechService.java @@ -549,7 +549,7 @@ public abstract class TextToSpeechService extends Service { @Override public boolean isValid() { if (mText == null) { - Log.wtf(TAG, "Got null text"); + Log.e(TAG, "null synthesis text"); return false; } if (mText.length() >= MAX_SPEECH_ITEM_CHAR_LENGTH) { @@ -641,14 +641,6 @@ public abstract class TextToSpeechService extends Service { } @Override - public boolean isValid() { - if (!super.isValid()) { - return false; - } - return checkFile(mFile); - } - - @Override protected AbstractSynthesisCallback createSynthesisCallback() { return new FileSynthesisCallback(mFile); } @@ -664,33 +656,6 @@ public abstract class TextToSpeechService extends Service { } return status; } - - /** - * Checks that the given file can be used for synthesis output. - */ - private boolean checkFile(File file) { - try { - if (file.exists()) { - Log.v(TAG, "File " + file + " exists, deleting."); - if (!file.delete()) { - Log.e(TAG, "Failed to delete " + file); - return false; - } - } - if (!file.createNewFile()) { - Log.e(TAG, "Can't create file " + file); - return false; - } - if (!file.delete()) { - Log.e(TAG, "Failed to delete " + file); - return false; - } - return true; - } catch (IOException e) { - Log.e(TAG, "Can't use " + file + " due to exception " + e); - return false; - } - } } private class AudioSpeechItem extends SpeechItem { |