summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2012-07-20 18:01:43 +0100
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-08-14 08:38:26 -0700
commit9c3d7a888d0c5c09f0153e81018ff68aa6e91712 (patch)
tree51e01c1f7c3b28eacdc3770e7135bc3dac4c3ff3
parented4e541a20cc662b8399844684d18ad0060bd1cb (diff)
downloadframeworks_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.java27
-rw-r--r--core/java/android/speech/tts/TextToSpeechService.java37
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 {