1 package com.android.car.messenger.tts; 2 3 import android.content.Context; 4 import android.os.Bundle; 5 import android.speech.tts.TextToSpeech; 6 import android.speech.tts.UtteranceProgressListener; 7 8 import java.util.LinkedList; 9 10 /** 11 * Fake implementation of {@link TTSEngine} for unit-testing. 12 */ 13 class FakeTTSEngine implements TTSEngine { 14 TextToSpeech.OnInitListener mOnInitListener; 15 UtteranceProgressListener mProgressListener; 16 LinkedList<Request> mRequests = new LinkedList<>(); 17 18 @Override 19 public void initialize(Context context, TextToSpeech.OnInitListener initListener) { 20 mOnInitListener = initListener; 21 } 22 23 @Override 24 public boolean isInitialized() { 25 return mOnInitListener != null; 26 } 27 28 @Override 29 public void setOnUtteranceProgressListener(UtteranceProgressListener progressListener) { 30 mProgressListener = progressListener; 31 } 32 33 @Override 34 public int speak(CharSequence text, int queueMode, Bundle params, String utteranceId) { 35 mRequests.add(new Request(text, queueMode, params, utteranceId)); 36 return TextToSpeech.SUCCESS; 37 } 38 39 @Override 40 public void stop() { 41 mRequests.clear(); 42 } 43 44 @Override 45 public boolean isSpeaking() { 46 // NOTE: currently not used in tests. 47 return false; 48 } 49 50 @Override 51 public void shutdown() { 52 stop(); 53 mOnInitListener = null; 54 } 55 56 @Override 57 public int getStream() { 58 return TextToSpeech.Engine.DEFAULT_STREAM; 59 } 60 61 void startRequest(String utteranceId) { 62 mProgressListener.onStart(utteranceId); 63 } 64 65 void finishRequest(String utteranceId) { 66 removeRequest(utteranceId); 67 mProgressListener.onDone(utteranceId); 68 } 69 70 void interruptRequest(String utteranceId, boolean interrupted) { 71 removeRequest(utteranceId); 72 mProgressListener.onStop(utteranceId, interrupted); 73 } 74 75 void failRequest(String utteranceId, int errorCode) { 76 removeRequest(utteranceId); 77 mProgressListener.onError(utteranceId, errorCode); 78 } 79 80 private void removeRequest(String utteranceId) { 81 mRequests.removeIf((request) -> request.mUtteranceId.equals(utteranceId)); 82 } 83 84 static class Request { 85 CharSequence mText; 86 int mQueueMode; 87 Bundle mParams; 88 String mUtteranceId; 89 90 public Request(CharSequence text, int queueMode, Bundle params, String utteranceId) { 91 mText = text; 92 mQueueMode = queueMode; 93 mParams = params; 94 mUtteranceId = utteranceId; 95 } 96 } 97 } 98